Как я могу перемещаться между формами

Я newbiest в C# и окно форма я делаю проект, и я встречаю некоторую проблему

  1. как я могу перемещаться по формам в окне( у меня есть полоса меню, при нажатии на нее будет отображаться элемент "бренд", поэтому, когда я нажимаю на него, он должен открыться в окне, я не хочу что-то использовать mdiparent / container, у меня есть form1 и form2, затем я помещаю полосу меню в form1, в которой есть что-то внутри form1, если использовать mdiparent / container, содержимое form1 / thing будет блокировать формы Form2 )

2.я использую приведенный ниже код, и проблема в том, что я хочу закрыть form1, который я нажимаю на "бренд" в полосе меню...но как???

public partial class Form1 : Form
{
    //  i put the menu strip in form1 design
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void Check_Click(object sender, EventArgs e)
    {
        Form2 Check = new Form2();
        Check.Show();
    }
}

3 ответов


вы не можете просто закрыть Form1 как это основная форма, но вы можете скрыть его. Использовать this.Hide().

private void Check_Click(object sender, EventArgs e)
{
    Form2 Check= new Form2();
    Check.Show();
    Hide();
}

[EDIT]

Не уверен, что это то, что спрашивают. Но...

существует множество способов реализации навигации между формами, например:

на Form1:

private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.Tag = this;
    form2.Show(this);
    Hide();
}

на Form2:

private void button1_Click(object sender, EventArgs e)
{
    var form1 = (Form1)Tag;
    form1.Show();
    Close();
}

Я думаю, вы должны создать usercontrols, а не различные формы. Затем вы можете добавить свои usercontrols в свою главную панель в соответствии с выбором в меню.

изначально что-то вроде ниже

this.panel.Controls.Clear();
this.panel.Controls.Add(new UserControl_For_Form1());

после того, как пользователь щелкните какой-либо другой выбор в меню.

this.panel.Controls.Clear();
this.panel.Controls.Add(new UserControl_For_Form2());

если вы действительно хотите использовать то, как вы используете в данный момент. Ниже код поможет.

добавьте свойство Form1 для Form2 и проанализируйте экземпляр form1 Form2 со своим конструктором.

public partial class Form2 : Form
    {
        private Form1 form1;

        public Form2(Form1 myForm)
        {
            InitializeComponent();
            form1 = myForm;
        }
    }

показать form2 и скрыть form1.

private void Check_Click(object sender, EventArgs e)
{
    Form2 Check= new Form2(this);
    Check.Show();
    Hide();
}

в событии закрытия form2 теперь вы можете показать экземпляр form1, который находится в form2, и закрыть form2.

использование форма MDI другой вариант для вас.


прошло 7 лет с тех пор, как этот вопрос был задан, но я хочу дать ответ, если кто-то все еще ищет решение. Если вы используете DevExpress, вы можете добавить рамку навигации в свою программу. Вы можете переключаться между различными компонентами, такими как GridControl, GroupBox и так далее. Таким образом, вам не нужно создавать дополнительную форму для навигации между формами.