C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

プログラムから作成したコントロールの値を他のクラスから参照す

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■95779 / inTopicNo.1)  プログラムから作成したコントロールの値を他のクラスから参照す
  
□投稿者/ ko (1回)-(2020/09/23(Wed) 15:45:33)

分類:[C#] 

開発環境 VisualStudio 2019
使用言語 C#
Formアプリケーションを作成中


フォーム1
ボタンを3つツールボックスから配置し、プログラムからテキストボックスとcomboBoxを複数個配置しました。
テキストボックスに出力する文章及び、comboBoxは構造体を使い、3つのボタンで表示を切り替えられるようにしてあります。
3つのボタンを押したときそれぞれで変わるcomboBoxが現在何を表示しているかを別の構造体に渡したいのですが、どうすればいいでしょうか。

ぜひご教示ください。



引用返信 編集キー/
■95782 / inTopicNo.2)  Re[1]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ ぶなっぷ (241回)-(2020/09/23(Wed) 16:36:40)
???
引用返信 編集キー/
■95785 / inTopicNo.3)  Re[1]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ kiku (196回)-(2020/09/23(Wed) 17:08:27)
No95779 (ko さん) に返信
> フォーム1
> ボタンを3つツールボックスから配置し、プログラムからテキストボックスとcomboBoxを複数個配置しました。
> テキストボックスに出力する文章及び、comboBoxは構造体を使い、3つのボタンで表示を切り替えられるようにしてあります。
> 3つのボタンを押したときそれぞれで変わるcomboBoxが現在何を表示しているかを別の構造体に渡したいのですが、どうすればいいでしょうか。

言葉だけでは理解できないため、
説明上必要最小限の動作するソースを提示した方が良いと思いました。

・なぜ構造体が出てくるのかわかりませんでした。
・構造体にcomboboxの項目が格納されているのであるならば、
 それをそのままどこかにコピーすれば良いとも思いました。
・具体的にどこのクラス(インスタンス)に渡したいのかもわかりませんでした。
引用返信 編集キー/
■95786 / inTopicNo.4)  Re[2]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ ko (2回)-(2020/09/23(Wed) 17:45:09)
No95785 (kiku さん) に返信
> ■No95779 (ko さん) に返信

すみません。下記のとおりです。

クラス1には、3枚のパネルとnewして作成した複数のcomboBoxがあります。
ComboBox comboBox = new ComboBox();

現在、3つのボタンがあり、それぞれで違うcomboBoxががnewして作成され、対応するパネルに表示されます。

例:ボタンAを押すとcomboBoxAがパネルAに表示される。
  ボタンBを押すとcomboBoxBがパネルBに表示される。
  ボタンCを押すとcomboBoxCがパネルCに表示される。

そこに新たにボタンDを追加し、現在のパネルが何か、パネル上のcomboBoxのアイテムは何が選択されているかを取得したいです。

今探そうとしているコードです。

foreach(Control control in パネル名.Controls)
{
if (control is ComboBox)
{

}
}


たびたび、申し訳ありませんが何卒宜しくお願い致します。

引用返信 編集キー/
■95787 / inTopicNo.5)  Re[3]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ みい (118回)-(2020/09/23(Wed) 18:28:52)
2020/09/24(Thu) 09:54:26 編集(投稿者)

> 現在、3つのボタンがあり、それぞれで違うcomboBoxががnewして作成され、対応するパネルに表示されます。
ボタンを押すたびにコンボボックスを作成するより、最初から貼り付けておいて
Visibleを切り替える方が簡単ではないかと思われます。
で、VisibleがTrueになっているコンボボックスのテキストを取得。


また、プログラム内で生成しているのであればコンボボックスの名称は分かっているはず。
それの値を取得すればいい。
コントロールを探すとかあまり難しく考えない方がいいと思います。
引用返信 編集キー/
■95790 / inTopicNo.6)  Re[4]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ ぶなっぷ (242回)-(2020/09/24(Thu) 11:14:08)
以下のように、
  パネルA → comboBoxA を表示
  パネルB → comboBoxB を表示
  パネルC → comboBoxC を表示
と決まっているなら、
TabControlがまさに適役と思われます。
  http://codepanic.itigo.jp/cs/tabcontrol.html

そうではなく、コントロールの動的生成(newによる生成)にこだわるのだとしても、
決まり切ったかたまりはリソースとして管理したほうが楽ですよ。

まず、フォーム1上の パネルA/B/Cを張り替えて表示したいエリアに、
ツールボックスからPanelを貼り付けます。
ここでは貼り付けたPanelの名前をchildPanelとします。

次に、パネルA, パネルB, パネルCをUserControlとして追加します。
ソリューションエクスプローラからプロジェクトを選択し、右マウスメニューから
「追加 - ユーザーコントロール」です。
名前はそれぞれ、PanelA, PanelB, PanelCとつけたとします。
その上で、PanelA, PanelB, PanelCにそれぞれ専用のComboBoxを貼り付けます。

この状態で起動すると、childPanelのエリアには何も表示されていないかと思います。

ボタンAのClickハンドラを追加し、以下のように実装します。
  private void buttonA_Click(object sender, EventArgs e)
  {
      childPanel.Controls.Clear();
      childPanel.Controls.Add(new PanelA());
  }
起動してボタンAを押すと、childPanelのエリアにPanelAが現れたはずです(^^)

あとは同様です。
  private void buttonB_Click(object sender, EventArgs e)
  {
      childPanel.Controls.Clear();
      childPanel.Controls.Add(new PanelB());
  }
       :
ボタンを押すたびに、PanelA, PanelB, PanelCが切り替わるかと思います。

引用返信 編集キー/
■95791 / inTopicNo.7)  プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ ぶなっぷ (243回)-(2020/09/24(Thu) 11:34:36)
2020/09/24(Thu) 11:35:15 編集(投稿者)
説明の簡単のため、
  childPanel.Controls.Add(new PanelA());
と書いちゃいましたが、

たとえばPanelAなら、
フォーム1のクラスメンバとして、
  UserControl PanelACtrl = new PanelA();
のように定義しておいて、

以下のように追加すれば、
  childPanel.Controls.Add(PanelACtrl);

PanelACtrl.ComboBoxAみたいな感じで、comboBoxAにアクセスできます。

引用返信 編集キー/
■95792 / inTopicNo.8)  Re[6]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ ko (3回)-(2020/09/24(Thu) 14:00:06)
No95791 (ぶなっぷ さん) に返信
> 2020/09/24(Thu) 11:35:15 編集(投稿者)
>
> 説明の簡単のため、
> childPanel.Controls.Add(new PanelA());
> と書いちゃいましたが、
>
> たとえばPanelAなら、
> フォーム1のクラスメンバとして、
> UserControl PanelACtrl = new PanelA();
> のように定義しておいて、
>
> 以下のように追加すれば、
> childPanel.Controls.Add(PanelACtrl);
>
> PanelACtrl.ComboBoxAみたいな感じで、comboBoxAにアクセスできます。





ご回答いただき、有難うございます。
私もタブとツールボックスの方が楽だと思って、最初そう作っていたのですが
上からの指示でして・・・。

引用返信 編集キー/
■95793 / inTopicNo.9)  Re[7]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ ぶなっぷ (244回)-(2020/09/24(Thu) 14:33:02)
> 私もタブとツールボックスの方が楽だと思って、最初そう作っていたのですが
> 上からの指示でして・・・。

タブ(TabControl)が使えない場合の話が後半の話になります。
それとも、そういう話ではない?

引用返信 編集キー/
■95795 / inTopicNo.10)  Re[8]: プログラムから作成したコントロールの値を他のクラスから参照す
□投稿者/ ko (4回)-(2020/09/24(Thu) 16:44:03)
No95793 (ぶなっぷ さん) に返信
> > 私もタブとツールボックスの方が楽だと思って、最初そう作っていたのですが
>>上からの指示でして・・・。
>
> タブ(TabControl)が使えない場合の話が後半の話になります。
> それとも、そういう話ではない?


すみません、私の書き方が悪く。
ccontrolがcomboBoxだった場合、comboBoxで選択された値を取得したい、が正しいです。

最後になりましたが、有難うございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ