1

たとえば、単一のテンプレートフォームに基づいて32個のWindowsフォームを作成したいのですが、これらのインスタンスは相互にリンクする必要があります。つまり、すべてのフォームには、次のインスタンスを呼び出すためのボタンなどがあります。好きなだけフォームを作成できますが、それらのインスタンスをどのようにリンクしますか?

これは、私がいくつかの子フォームを作成するために使用するものです。

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へのラップアラウンド

どんなアイデアでも大歓迎です!

よろしく

クリス

4

2 に答える 2

1

フォームの静的コレクションを作成できます。コンストラクターでフォームインスタンスをリストに追加します(そして破棄中に削除します)。次のフォームを理解するには、現在のフォームのインデックスを見つけて、それに基づいてリスト内の次のフォームを取得します。2つのボタンを使用してフォームを作成し、以下のように変更してテストします。

 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();
            }
        }
    }
于 2013-02-24T22:25:02.197 に答える
0

私はあなたが何をしようとしているのか本当にわかりません:)。複数のフォームをカウントする場合は、フォームにプロパティNumberを追加できます。そしてそこから上向きに検索します。

メインフォーム;

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

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; }
}

テストされていないコードです。これが少し役立つことを願っています:)。

于 2013-02-24T22:17:36.667 に答える