Подскажите пожалуйста!
Хотел сделать, чтобы в MDI приложении на главной форме
не появлялись полосы прокрутки при перетаскивании дочерней
за пределы Mdi-контейнера
25.12.03 13:56: Перенесено модератором из '.NET' — AVK
O>Хотел сделать, чтобы в MDI приложении на главной форме
O>не появлялись полосы прокрутки при перетаскивании дочерней
O>за пределы Mdi-контейнера
Тогда это уже будет не MDI
Здравствуйте, Igor Trofimov, Вы писали:
O>>Хотел сделать, чтобы в MDI приложении на главной форме
O>>не появлялись полосы прокрутки при перетаскивании дочерней
O>>за пределы Mdi-контейнера
iT>Тогда это уже будет не MDI
Это будет Mdi.
Извините я плохо изъяснился!!!
За пределы видимой части mdiparent-формы,
т.е. когда дочерняя форма приближена так к одному их краев родительской, что
видна только её часть (о дочерней). Тогда и появляются скролл-бары.
Так вот, вот что б они не появлялись. Ну нет так нет...
Может быть подскажете, почему когда я открываю одну дочернюю форму как(WindowState) — Maximized
и за ней открываю или создаю другую как Normal, — она так же открываеться или создаеться как Maximized.
А когда открываю допустим много дочерних с WindowState = Maximized, и активную делаю Normal, то все открытые
WindowState = Maximized — формы становяться Normal. Что то наверное еще нужно определить, а что...?
O>Извините я плохо изъяснился!!!
нет, ты нормально изъяснился.
Просто MDI — это такой стандарт на устройство интерфейса программ.. И все программы MDI работают именно так. А тебе то не нравится, это не нравится в их поведении.
Здравствуйте, Igor Trofimov, Вы писали:
O>>Извините я плохо изъяснился!!!
iT>нет, ты нормально изъяснился.
iT>Просто MDI — это такой стандарт на устройство интерфейса программ.. И все программы MDI работают именно так. А тебе то не нравится, это не нравится в их поведении.
Ну хорошо!
Есть масса программ с mdi — интерфейсом,
где не появляются полосы прокрутки при перетаскивании дочерних окон
(пример: !1с!, !Excel! — ведь у них mdi — интерфейс, или что-то другое),
а нет ни каких проблем с WindowState(Maximized и Normal) — !1С!.
Все это в них реализовано не в рамках
этого стандарта на устройство интерфейса программ?....
Я просто хотел сделать часть интерфейса своего приложения похожим,
так как считаю эти части удобными, собственно за этим и задал вопрос на форуме,-
для этого ведь кажется форумы существуют (может не только, но для этого тоже...).
А вы мне то не нравиться, — это не нравиться...
Ни хочу что бы это читалось грубо и неуважительно по отношению к собеседнику,
но ведь это плохой ответ на вопрос, сказав что это вообще не нужно,
есть стандарт и точка...
Здравствуйте, oleg2406rsdn, Вы писали:
O>Здравствуйте, Igor Trofimov, Вы писали:
O>>>Извините я плохо изъяснился!!!
iT>>нет, ты нормально изъяснился.
iT>>Просто MDI — это такой стандарт на устройство интерфейса программ.. И все программы MDI работают именно так. А тебе то не нравится, это не нравится в их поведении.
O>
O>Ну хорошо!
O>Есть масса программ с mdi — интерфейсом,
O>где не появляются полосы прокрутки при перетаскивании дочерних окон
O>(пример: !1с!, !Excel! — ведь у них mdi — интерфейс, или что-то другое),
O>а нет ни каких проблем с WindowState(Maximized и Normal) — !1С!.
O>Все это в них реализовано не в рамках
O>этого стандарта на устройство интерфейса программ?....
O>Я просто хотел сделать часть интерфейса своего приложения похожим,
O>так как считаю эти части удобными, собственно за этим и задал вопрос на форуме,-
O>для этого ведь кажется форумы существуют (может не только, но для этого тоже...).
O>А вы мне то не нравиться, — это не нравиться...
O>Ни хочу что бы это читалось грубо и неуважительно по отношению к собеседнику,
O>но ведь это плохой ответ на вопрос, сказав что это вообще не нужно,
O>есть стандарт и точка...
////// По поводу полос прокрутки почти решено — мир не без добрых людей,
как получиться — примерчик нарисую ...
Вот и Mdi — без скролбаров на главной форме
using System;
using System.Drawing;
using System.Windows.Forms;
class MyForm: Form
{
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.MenuItem menuItem3;
private System.Windows.Forms.MenuItem menuItem4;
public MyForm()
{
this.Text="Главная Форма";
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
IsMdiContainer = true;
InitializeComponent();
}
static void Main()
{
Application.Run(new MyForm());
}
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.menuItem4 = new System.Windows.Forms.MenuItem();
this.menuItem3 = new System.Windows.Forms.MenuItem();
//
// mainMenu1
//
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem2,
this.menuItem4,
this.menuItem3});
this.menuItem1.Text = "Main";
//
// menuItem2
//
this.menuItem2.Index = 0;
this.menuItem2.Text = "AddForm";
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
//
// menuItem4
//
this.menuItem4.Index = 1;
this.menuItem4.Text = "CloseForm";
this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click);
//
// menuItem3
//
this.menuItem3.Index = 2;
this.menuItem3.Text = "Exit";
this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
//
// MyForm
//
AutoScaleBaseSize = new System.Drawing.Size(5, 13);
ClientSize = new System.Drawing.Size(408, 241);
this.Menu = this.mainMenu1;
Name = "MyForm";
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
//Находим MDIClient'a
foreach(Control control in Controls)
if (control is MdiClient)
new MyNativeWindow(control);
Form form = new Form();
form.Text = "НЕ Главная форма!";
form.WindowState = System.Windows.Forms.FormWindowState.Normal;
form.MdiParent = this;
form.Show();
}
private void menuItem3_Click(object sender, System.EventArgs e)
{
Close();
}
private void menuItem4_Click(object sender, System.EventArgs e)
{
this.ActiveMdiChild.Close();
}
class MyNativeWindow: NativeWindow
{
public MyNativeWindow(Control control)
{
AssignHandle(control.Handle);
control.HandleDestroyed += new EventHandler(OnHandleDestroyed);
}
void OnHandleDestroyed(object sender, EventArgs e)
{
ReleaseHandle();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x3F)
return;
base.WndProc(ref m);
}
}
}
Не мое, автор —