MDI (C#)
От: oleg2406rsdn Россия  
Дата: 22.10.03 07:45
Оценка:
Подскажите пожалуйста!
Хотел сделать, чтобы в MDI приложении на главной форме
не появлялись полосы прокрутки при перетаскивании дочерней
за пределы Mdi-контейнера


25.12.03 13:56: Перенесено модератором из '.NET' — AVK
Re: MDI (C#)
От: oleg2406rsdn Россия  
Дата: 22.10.03 10:06
Оценка:
Здравствуйте, oleg2406rsdn, Вы писали:

O>Подскажите пожалуйста!

O>Хотел сделать, чтобы в MDI приложении на главной форме
O>не появлялись полосы прокрутки при перетаскивании дочерней
O>за пределы Mdi-контейнера

............
Re: MDI (C#)
От: oleg2406rsdn Россия  
Дата: 22.10.03 12:33
Оценка:
Здравствуйте, oleg2406rsdn, Вы писали:

O>Подскажите пожалуйста!

O>Хотел сделать, чтобы в MDI приложении на главной форме
O>не появлялись полосы прокрутки при перетаскивании дочерней
O>за пределы Mdi-контейнера
Re[2]: MDI (C#)
От: Sinatr Германия  
Дата: 22.10.03 12:40
Оценка:
Привет!

O>>Хотел сделать, чтобы в MDI приложении на главной форме

O>>не появлялись полосы прокрутки при перетаскивании дочерней
O>>за пределы Mdi-контейнера

Хочешь ответа? Держи: а зачем не появлялись?
---
ПроГLамеры объединяйтесь..
Re: MDI (C#)
От: Igor Trofimov  
Дата: 22.10.03 17:00
Оценка:
O>Хотел сделать, чтобы в MDI приложении на главной форме
O>не появлялись полосы прокрутки при перетаскивании дочерней
O>за пределы Mdi-контейнера

Тогда это уже будет не MDI
Re[2]: MDI (C#)
От: oleg2406rsdn Россия  
Дата: 22.10.03 19:49
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

O>>Хотел сделать, чтобы в MDI приложении на главной форме

O>>не появлялись полосы прокрутки при перетаскивании дочерней
O>>за пределы Mdi-контейнера

iT>Тогда это уже будет не MDI


Это будет Mdi.
Извините я плохо изъяснился!!!
За пределы видимой части mdiparent-формы,
т.е. когда дочерняя форма приближена так к одному их краев родительской, что
видна только её часть (о дочерней). Тогда и появляются скролл-бары.
Так вот, вот что б они не появлялись. Ну нет так нет...

Может быть подскажете, почему когда я открываю одну дочернюю форму как(WindowState) — Maximized
и за ней открываю или создаю другую как Normal, — она так же открываеться или создаеться как Maximized.
А когда открываю допустим много дочерних с WindowState = Maximized, и активную делаю Normal, то все открытые
WindowState = Maximized — формы становяться Normal. Что то наверное еще нужно определить, а что...?
Re[3]: MDI (C#)
От: Igor Trofimov  
Дата: 23.10.03 14:37
Оценка:
O>Извините я плохо изъяснился!!!

нет, ты нормально изъяснился.

Просто MDI — это такой стандарт на устройство интерфейса программ.. И все программы MDI работают именно так. А тебе то не нравится, это не нравится в их поведении.
Re[4]: MDI (C#)
От: oleg2406rsdn Россия  
Дата: 23.10.03 19:30
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

O>>Извините я плохо изъяснился!!!


iT>нет, ты нормально изъяснился.


iT>Просто MDI — это такой стандарт на устройство интерфейса программ.. И все программы MDI работают именно так. А тебе то не нравится, это не нравится в их поведении.



Ну хорошо!
Есть масса программ с mdi — интерфейсом,
где не появляются полосы прокрутки при перетаскивании дочерних окон
(пример: !1с!, !Excel! — ведь у них mdi — интерфейс, или что-то другое),
а нет ни каких проблем с WindowState(Maximized и Normal) — !1С!.
Все это в них реализовано не в рамках
этого стандарта на устройство интерфейса программ?....

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

А вы мне то не нравиться, — это не нравиться...
Ни хочу что бы это читалось грубо и неуважительно по отношению к собеседнику,
но ведь это плохой ответ на вопрос, сказав что это вообще не нужно,
есть стандарт и точка...

Re[5]: MDI (C#)
От: oleg2406rsdn Россия  
Дата: 24.10.03 12:01
Оценка:
Здравствуйте, 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>есть стандарт и точка...


////// По поводу полос прокрутки почти решено — мир не без добрых людей,
как получиться — примерчик нарисую ...
Re: MDI (C#)
От: oleg2406rsdn Россия  
Дата: 27.10.03 08:56
Оценка:
Вот и 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);
        }
    }
}

Не мое, автор —
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.