0

複数のフォームインスタンスを作成しようとしています。たとえば、form1とform2があり、form1にListViewがあります。

ListViewでアイテムをクリックすると、form2の新しいインスタンスが作成されます。

Form2 listview1.FocusedItem.SubItems[0].Text = new Form2();
listview1.FocusedItem.SubItems[0].Text.Show();

しかし、C#ではそれができません。(はい..エラーが発生しました:D)

わかりました。アイデアは..form2のインスタンスを3つ作成したいとします。

Form2 f21 = new Form2();

Form2 f22 = new Form2();

Form2 f23 = new Form2();

そして今、私は3つのform2を持っていますが、いくつのフォームを作成できるかわからない場合はどうなりますか?(リストビューのアイテムのフォームベースを動的に作成します)

実際、これはそれを行うための正しい方法ではないかもしれません...どんな解決策もありがたいです。

4

2 に答える 2

3

listview1.FocusedItem.SubItems[0].Textstringプロパティであるため、に割り当てることはできませんSystem.Windows.Forms.Formstring

ここで何を達成しようとしているのかはあまり明確ではありませんが、次のようなものかもしれません

new Form2().Show();

アイテムをクリックするだけで十分です。

それがあなたが求めているものではない場合は、明確にしてください。

編集

任意の数のフォームを管理するには、次のようにします。

//somewhere in the code a global collection
var formsCollection = new List<Form>(); 

アイテムをクリックしてください:

formsCollection.Add(new Form2());
formsCollection[formsCollection.Count-1].Show();

それを義務付けるもう1つのことは、コレクション内で特定のフォームを見つける必要があることです(何らかの理由で)。リクエストに応じて後で見つけることができるように、Form2にいくつかの特別なプロパティ(いくつかの一意の識別子)を割り当てることができます。

于 2012-05-11T14:00:52.877 に答える
3

そうすることを許可されていないということは、何らかのエラーが発生していることを意味していると思います。構文エラーですか?それは私の推測です。

また、新しいクリックごとに新しいフォームを作成するのはなぜですか?既存のオブジェクトを再利用するか、古いオブジェクトを適切に破棄/間接参照することをお勧めします。

回線に問題があると思います

Form2 listview1.FocusedItem.SubItems[0].Text = new Form2();

新しいフォームをテキストプロパティに割り当てることはできません。さらに、この種のステートメントでは、他の場所での参照ではなく、変数の名前を指定することになっています。次のような意味ですか?

Form2 f2 = new Form2(listview1.FocusedItem.SubItems[0].Text);
f2.Show();
于 2012-05-11T14:01:18.227 に答える