Перейти к содержимому

Фотография

C# и все, что с ним связаноКурсовые, лабораторные и т.д.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 166

#21
Jismo

Jismo
  • Свой человек
  • 975 сообщений
2Visual1 пордон :rotate:
  • 0

#22
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Слушайте, уважаемые участники, ко мне обратился человек с вопросом, но я не смог реализовать может кто поможет?
Теперь суть дела: есть MDI пиложение, в нем не важно как создаются дочерние формы, так вот он хотел реализовать сворачивание этих дочерних окон, так же как это происходит в винде, а не так как происходит это в MDI-приложении, возможно ли это, если да, то может кто подсказать или помочь?
  • 0

#23
ringo-ring

ringo-ring
  • Частый гость
  • 78 сообщений

Если так думать (что код дефолтного конструктора не генерируется, а поля по умолчанию устанавливаются в ноль), то тогда бы мой пример должен был работать. Он не работает, значит, это не так.


"ваше утверждение неверно" =)
и никакого противоречия здесь нет
Код не работает потому, что структура должна быть проинициализирована (т.е. ее полям должны быть присвоены какие-то значения) прежде чем ее можно будет использовать. Это логично и дополнительных пояснений "почему" я думаю тут не требуется.
Но никто и не говорил о том, что поля установятся в ноль, если мы просто объявим структуру.
Код, устанавливающий нули, вызывается при вызове конструктора:
Point p = new Point()
Переопределять код этого конструктора почему-то нельзя - он поставит нам нули по-любому. О чем это говорит. О том, что конструктор структуры Point не генерируется при компиляции, вместо этого юзается дефолтный код обнуления. При вызове типа new Point() вместо "конструктора" на самом деле вызывается код обнуления. Зачем это надо? По-видимому, благодаря такому подходу инициализация массивов значимых типов выполняется более эффективно.
  • 0

#24
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Код не работает потому, что структура должна быть проинициализирована (т.е. ее полям должны быть присвоены какие-то значения) прежде чем ее можно будет использовать. Это логично и дополнительных пояснений "почему" я думаю тут не требуется.
Но никто и не говорил о том, что поля установятся в ноль, если мы просто объявим структуру.
Код, устанавливающий нули, вызывается при вызове конструктора:
Point p = new Point()

Так, так. Я знаю, что на практике делается именно так, иначе не получится. Однако, что скажете в случае такого примера:

	internal struct Point
	{
		public int m_x, m_y;		
	}
	
	internal sealed class Rectangle
	{
		public Point m_topLeft, m_bottomRight;
		
		public Rectangle()
		{
			TellAboutMyself();
		}
		
		public void TellAboutMyself()
		{
			Console.WriteLine("m_topLeft.m_x = {0}, m_topLeft.m_y = {1}", m_topLeft.m_x, m_topLeft.m_y);
			Console.WriteLine("m_bottomRight.m_x = {0}, m_bottomRight = {1}", m_bottomRight.m_x, m_bottomRight.m_y);
		}
	}

	class Program
	{
		static void Main(string[] args)
		{
			Rectangle r = new Rectangle();
		 }
	}
Здесь, правда, компилятор выдает предупреждения, но не ошибки. Но, как видите, в этом примере структуры m_topLeft и m_bottomRight были просто объявлены, без инициализации. Нигде нет строк с вызовом дефолтного конструктора new Point(), но поля обеих структур дружно установились в ноль. Хотя вроде бы "никто и не говорил о том, что поля установятся в ноль, если мы просто объявим структуру". :eek:
  • 0

#25
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Хотя вроде бы "никто и не говорил о том, что поля установятся в ноль, если мы просто объявим структуру". :eek:

Что-то это мне напоминает... :cry:
  • 0

#26
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
Zulkar, нельзя ли яснее? Что там вам напоминает?
  • 0

#27
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
Господа .Net 3.5, Если такие ??? - была такая темка. А вообще на вопрос почему - очень часто ответ один - потому что так решил разработчик языка.
  • 0

#28
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
Не "очень часто", а тогда, когда это на самом деле так и есть. Вот мы и пытаемся разобраться, почему он (точнее, они - разработчики C#) так решили. В ответах ringo-ring, кстати, видно хорошее знание темы.
  • 0

#29
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Не "очень часто", а тогда, когда это на самом деле так и есть. Вот мы и пытаемся разобраться, почему он (точнее, они - разработчики C#) так решили.

Почему решили - вопрос другой. Существуют языки, где переопределять конструктор по умолчанию для структур можно.
  • 0

#30
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Почему решили - вопрос другой.

Конечно, другой. Я уже говорил на предыдущей странице, что для практических задач приведенных ответов вполне достаточно.

Существуют языки, где переопределять конструктор по умолчанию для структур можно.

И об этом тоже уже здесь говорилось.
  • 0

#31
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Слушайте, уважаемые участники, ко мне обратился человек с вопросом, но я не смог реализовать может кто поможет?
Теперь суть дела: есть MDI пиложение, в нем не важно как создаются дочерние формы, так вот он хотел реализовать сворачивание этих дочерних окон, так же как это происходит в винде, а не так как происходит это в MDI-приложении, возможно ли это, если да, то может кто подсказать или помочь?

Может дежавю поможет обратить внимание :laugh:!
  • 0

#32
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
Jismo: В каком направлении копали для решения этого вопроса? Ваш вопрос, я уверен, решаемый. Такая штуковина есть, например, в Word 2003. Причем там это сделано просто замечательно - юзеру предоставляется на выбор, как он хочет сворачивать дочерние окна документов - в главном окне Word'a или на панели задач (Taskbar).
  • 0

#33
Jismo

Jismo
  • Свой человек
  • 975 сообщений
да он решаемый, но есть сложности, копали в сторону муляжа, так сказать скрытия окна и отображения кнопки внизу MDI мамы с названием дочернего окна. Да еще кое что дочерние формы надо располагать внизу матринского окна но по виду они и

и по функционалу должны быть похожи как на панели задач Windows

это так сказать план, но как это сделать я не знаю, не могу даже понять как к созданному при выполнении приложения окну обращаться дабы скрыть, а остальное можно сделать
  • 0

#34
-Zen2004-

-Zen2004-
  • Завсегдатай
  • 136 сообщений

Jismo: В каком направлении копали для решения этого вопроса? Ваш вопрос, я уверен, решаемый. Такая штуковина есть, например, в Word 2003. Причем там это сделано просто замечательно - юзеру предоставляется на выбор, как он хочет сворачивать дочерние окна документов - в главном окне Word'a или на панели задач (Taskbar).


Опишите пожалуйста как такая штуковина включается в Ворде по умолчанию он задает новое окно на панели задач....
  • 0

#35
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

да он решаемый, но есть сложности, копали в сторону муляжа, так сказать скрытия окна и отображения кнопки внизу MDI мамы с названием дочернего окна. Да еще кое что дочерние формы надо располагать внизу матринского окна но по виду они и по функционалу должны быть похожи как на панели задач Windows

это так сказать план, но как это сделать я не знаю, не могу даже понять как к созданному при выполнении приложения окну обращаться дабы скрыть, а остальное можно сделать

Надо делать не скрытие дочерних окон (действительно, это какой-то муляж, искусственный прием), а их минимизацию. Минимизацию на панель задач самой Windows я пока не видел. Зато в MSDN Library есть простая функция для минимизации дочерних окон в пределах родительского окна приложения:

public enum MdiLayout   //Определено в System.Windows.Forms
{ 
   ArrangeIcons, // Все иконки дочерних окон располагаются в клиентской области родительской MDI-формы
   Cascade,		
   TileHorizontal,
   TileVertical
}

//Определен в классе Form пространства имен System.Windows.Forms
public void LayoutMdi(MdiLayout value)
Пример использования:
 private void VerticallyTileMyWindows (object sender, System.EventArgs e)
 {
	// Минимизировать дочерние формы.
	this.LayoutMdi(MdiLayout.ArrangeIcons);
 }
Может, это вам подойдет?

Сообщение отредактировал Visual1: 23.01.2009, 21:30:09

  • 0

#36
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Опишите пожалуйста как такая штуковина включается в Ворде по умолчанию он задает новое окно на панели задач....

Насчет русской версии Word'a не знаю, а если англоязычная версия, то заходим в меню Tools -> Options -> диалоговое окно Options -> вкладка View -> чекбокс "Windows in Taskbar". Если отмечено галочкой, то дочерние окна будут сворачиваться на панель задач, если не отмечено, то в клиентской области главного окна Word'a.
  • 0

#37
Jismo

Jismo
  • Свой человек
  • 975 сообщений
2Visual1 В том то и дело что стандартные методы не устраивают, про this.LayoutMdi(MdiLayout.ArrangeIcons); мне известно :(, но Вы же сами видите на что похожи свернутые окна(там 3 кнопки и названия дочернего окна не видно), а нужно чтоб было похоже КАК на панели задач(название видно и кнопок нет, как буд-то одна большая кнопка).
Ну в принципе вопрос может быть отложен так как автор сказал что нашел кое что, что ему поможет, так что спасибо за отклик :D
  • 0

#38
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
2 Jismo: Как идут дела с решением этой проблемы? :(
  • 0

#39
Jismo

Jismo
  • Свой человек
  • 975 сообщений
2Visual1: автор сего вопроса(об MDI) пока ничего не сказал, а у меня лично пока что другие заботы на работе :(
  • 0

#40
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
2Jismo: А вы у него спросите. Прошло уже три дня, можно было все решить :(
  • 0


Количество пользователей, читающих эту тему: 0

пользователей: 0, неизвестных прохожих: 0, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.