首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#窗口窗体-链接同一窗体的实例

C#窗口窗体-链接同一窗体的实例
EN

Stack Overflow用户
提问于 2013-02-24 22:04:11
回答 2查看 851关注 0票数 1

我想要创建,比如说基于单个模板表单的32个Windows表单,并且这些实例应该相互链接。也就是说,每个表单都有一个按钮来调用下一个实例,依此类推。我可以创建尽可能多的形式,但我如何将这些实例联系在一起呢?

这就是我用来创建几个子表单的方法:

代码语言:javascript
复制
public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ChildForm child = new ChildForm();
        child.Show();
    }
}

事件的顺序如下:

  • 用户启动应用程序,显示主窗体(只有“打开子”按钮)
  • 用户按“打开子”按钮,将打开子窗体的第一个实例。
  • 第一个子窗体(标题为“子窗体1")有”打开子窗体2“按钮。
  • 如果用户按下“打开子窗体2”,则隐藏子窗体1,并显示子窗体2。
  • 如果到达最后一个子窗体,则将其环绕到子窗体1。

任何想法都欢迎!

问候

克里斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-24 22:25:02

您可以在构造函数中创建表单的静态集合,将表单实例添加到列表中(并在dispose期间删除它)。要计算出下一个表单,您可以找到当前表单的索引,并根据该索引在列表中获取下一个表单。创建一个带有两个按钮的表单,并按下面的方式修改它以测试它。

代码语言:javascript
复制
 public partial class Form1 : Form
    {
        static List<Form1> formList = new List<Form1>();
        public Form1()
        {
            InitializeComponent();
            formList.Add(this);
        }



        private void button1_Click(object sender, EventArgs e)
        {
            int idx = formList.IndexOf(this);
            int nextIdx = (idx == formList.Count()-1 ?  0: idx+1 );

            Form1 nextForm = formList[nextIdx];
            nextForm.changeTextAndFocus("next form: " + nextIdx);
        }

        // moves to the next form and changes the text
        public void changeTextAndFocus(string txt)
        {
            this.Focus();
            this.Text = txt;
        }

        //Creates 5 forms
        private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++)
            {
                Form1 newForm = new Form1();
                newForm.Show();
            }
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2013-02-24 22:17:36

我真的不知道你打算做什么:)如果要计算多个窗体,可以向窗体添加一个属性号。然后从那里向上搜索。

主形;

代码语言:javascript
复制
public partial class Form1 : Form
{
     public Form1()
     {
         InitializeComponent();
     }

     private void button1_Click(object sender, EventArgs e)
     {
         ChildForm first = new ChildForm();
         first.Number = 1;
         first.Show();
     }
}

ChildForm

代码语言:javascript
复制
public partial class ChildForm : Form
{
    public ChildForm()
    {
        // createButton here
    }
    private void button_Click(object sender, EventArgs e)
    {
        ChildForm _childForm = new ChildForm();
        _childForm.Owner = this;
        _childForm.Number = this.Number + 1;
        this.Hide();
        _childForm.Show();
    }

    public void FirstChildForm()
    {
        if (this.Number != 1) //maybe not that static
        {
            (this.Owner as ChildForm).FirstChildForm();
            this.Close(); // or hide or whatever
        }
    }
    public int Number
    { get; set; }
}

没有经过测试的代码,希望这能有所帮助:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15057184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档