C# и все, что с ним связаноКурсовые, лабораторные и т.д.
#22
Отправлено 22.01.2009, 13:47:39
Теперь суть дела: есть MDI пиложение, в нем не важно как создаются дочерние формы, так вот он хотел реализовать сворачивание этих дочерних окон, так же как это происходит в винде, а не так как происходит это в MDI-приложении, возможно ли это, если да, то может кто подсказать или помочь?
#23
Отправлено 23.01.2009, 00:13:00
Если так думать (что код дефолтного конструктора не генерируется, а поля по умолчанию устанавливаются в ноль), то тогда бы мой пример должен был работать. Он не работает, значит, это не так.
"ваше утверждение неверно" =)
и никакого противоречия здесь нет
Код не работает потому, что структура должна быть проинициализирована (т.е. ее полям должны быть присвоены какие-то значения) прежде чем ее можно будет использовать. Это логично и дополнительных пояснений "почему" я думаю тут не требуется.
Но никто и не говорил о том, что поля установятся в ноль, если мы просто объявим структуру.
Код, устанавливающий нули, вызывается при вызове конструктора:
Point p = new Point()
Переопределять код этого конструктора почему-то нельзя - он поставит нам нули по-любому. О чем это говорит. О том, что конструктор структуры Point не генерируется при компиляции, вместо этого юзается дефолтный код обнуления. При вызове типа new Point() вместо "конструктора" на самом деле вызывается код обнуления. Зачем это надо? По-видимому, благодаря такому подходу инициализация массивов значимых типов выполняется более эффективно.
#24
Отправлено 23.01.2009, 11:48:05
Так, так. Я знаю, что на практике делается именно так, иначе не получится. Однако, что скажете в случае такого примера:Код не работает потому, что структура должна быть проинициализирована (т.е. ее полям должны быть присвоены какие-то значения) прежде чем ее можно будет использовать. Это логично и дополнительных пояснений "почему" я думаю тут не требуется.
Но никто и не говорил о том, что поля установятся в ноль, если мы просто объявим структуру.
Код, устанавливающий нули, вызывается при вызове конструктора:
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(), но поля обеих структур дружно установились в ноль. Хотя вроде бы "никто и не говорил о том, что поля установятся в ноль, если мы просто объявим структуру".
#29
Отправлено 23.01.2009, 12:23:49
Почему решили - вопрос другой. Существуют языки, где переопределять конструктор по умолчанию для структур можно.Не "очень часто", а тогда, когда это на самом деле так и есть. Вот мы и пытаемся разобраться, почему он (точнее, они - разработчики C#) так решили.
#30
Отправлено 23.01.2009, 12:45:15
Конечно, другой. Я уже говорил на предыдущей странице, что для практических задач приведенных ответов вполне достаточно.Почему решили - вопрос другой.
И об этом тоже уже здесь говорилось.Существуют языки, где переопределять конструктор по умолчанию для структур можно.
#31
Отправлено 23.01.2009, 12:48:40
Теперь суть дела: есть MDI пиложение, в нем не важно как создаются дочерние формы, так вот он хотел реализовать сворачивание этих дочерних окон, так же как это происходит в винде, а не так как происходит это в MDI-приложении, возможно ли это, если да, то может кто подсказать или помочь?
Может дежавю поможет обратить внимание !
#32
Отправлено 23.01.2009, 12:54:35
#33
Отправлено 23.01.2009, 14:20:01
и по функционалу должны быть похожи как на панели задач Windows
это так сказать план, но как это сделать я не знаю, не могу даже понять как к созданному при выполнении приложения окну обращаться дабы скрыть, а остальное можно сделать
#34
Отправлено 23.01.2009, 14:45:29
Jismo: В каком направлении копали для решения этого вопроса? Ваш вопрос, я уверен, решаемый. Такая штуковина есть, например, в Word 2003. Причем там это сделано просто замечательно - юзеру предоставляется на выбор, как он хочет сворачивать дочерние окна документов - в главном окне Word'a или на панели задач (Taskbar).
Опишите пожалуйста как такая штуковина включается в Ворде по умолчанию он задает новое окно на панели задач....
#35
Отправлено 23.01.2009, 21:08:58
Надо делать не скрытие дочерних окон (действительно, это какой-то муляж, искусственный прием), а их минимизацию. Минимизацию на панель задач самой Windows я пока не видел. Зато в MSDN Library есть простая функция для минимизации дочерних окон в пределах родительского окна приложения:да он решаемый, но есть сложности, копали в сторону муляжа, так сказать скрытия окна и отображения кнопки внизу MDI мамы с названием дочернего окна. Да еще кое что дочерние формы надо располагать внизу матринского окна но по виду они и по функционалу должны быть похожи как на панели задач Windows
это так сказать план, но как это сделать я не знаю, не могу даже понять как к созданному при выполнении приложения окну обращаться дабы скрыть, а остальное можно сделать
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
#36
Отправлено 23.01.2009, 21:22:35
Насчет русской версии Word'a не знаю, а если англоязычная версия, то заходим в меню Tools -> Options -> диалоговое окно Options -> вкладка View -> чекбокс "Windows in Taskbar". Если отмечено галочкой, то дочерние окна будут сворачиваться на панель задач, если не отмечено, то в клиентской области главного окна Word'a.Опишите пожалуйста как такая штуковина включается в Ворде по умолчанию он задает новое окно на панели задач....
#37
Отправлено 24.01.2009, 11:11:11
Ну в принципе вопрос может быть отложен так как автор сказал что нашел кое что, что ему поможет, так что спасибо за отклик
Количество пользователей, читающих эту тему: 0
пользователей: 0, неизвестных прохожих: 0, скрытых пользователей: 0