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

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

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

Re[2]: 動的につくったタブページをメソッド引数に!


(過去ログ 120 を表示中)

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

■70422 / inTopicNo.1)  動的につくったタブページをメソッド引数に!
  
□投稿者/ おにまーる (1回)-(2014/03/21(Fri) 17:01:23)

分類:[C#] 

foreach (var itemdll in _dll)
{
  var title = itemdll.TabName;
  var tabPage = new TabPage(title);
  tabPage.BackColor = Color.White;
  tabPage.Name = "exte";
tabControl1.TabPages.Add(tabPage);
  itemdll.レイアウト関数(this.webBrowser7, this.tabControl1, this.Controls, this.tabPage);
}

DLLの数だけタブページが作られ、タブページの中はDLLの中のレイアウト関数でテキストボックスやラベルを作り出すプログラムを作っています。
引数のwebBrowser7とtabControl1とControlsは、デザイン画面で作ったものですが、tabPageのみforeach内で作り出しています。

このままだと、エラーが出てしまいます。動的に作ったtabPageを引数に入れる方法はあるでしょうか?






dll内のレイアウト関数は
レイアウト関数(this.webBrowser7, this.tabControl1, this.Controls, this.tabPage)

  var CheckBox1 = new CheckBox();
  CheckBox1.Location = new System.Drawing.Point(10, 200);//
  CheckBox1.AutoSize = true;
  CheckBox1.Name = "CheckBox1";
  tabPage.Controls.Add(CheckBox1);

このような形です。引数がエラーなので、
  tabPage.Controls.Add(CheckBox1);
はエラーがでます。

引用返信 編集キー/
■70423 / inTopicNo.2)  Re[1]: 動的につくったタブページをメソッド引数に!
□投稿者/ Azulean (288回)-(2014/03/21(Fri) 17:10:36)
No70422 (おにまーる さん) に返信
> foreach (var itemdll in _dll)
> {
>   var title = itemdll.TabName;
>   var tabPage = new TabPage(title);
>   tabPage.BackColor = Color.White;
>   tabPage.Name = "exte";
> tabControl1.TabPages.Add(tabPage);
>   itemdll.レイアウト関数(this.webBrowser7, this.tabControl1, this.Controls, this.tabPage);
> }

「tabControl1.TabPages.Add(tabPage);」は何を意味しているかを考えれば、できそうな気がするんですが…。
this. の意味とか、ローカル変数の意味とかがうまくできていない状態なのでしょうか。

# 単に引数に tabPage と渡せば ループの中の 2 行目で new されたものを渡せますよね。


> このままだと、エラーが出てしまいます。動的に作ったtabPageを引数に入れる方法はあるでしょうか?

前述したようにきちんと C# の構文や仕組みを理解できていればできます。


> dll内のレイアウト関数は
> レイアウト関数(this.webBrowser7, this.tabControl1, this.Controls, this.tabPage)
> {

これメソッドの引数宣言としてきちんと書けていませんよね。
メソッドの引数はどのように書くものだったか、きちんと勉強しなおしてください。



個人的には先日のこのスレッドと同じ系統のソースコードにお見受けするのですが、何か関係あるのでしょうか。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=70333
引用返信 編集キー/
■70424 / inTopicNo.3)  Re[1]: 動的につくったタブページをメソッド引数に!
□投稿者/ 魔界の仮面弁士 (569回)-(2014/03/21(Fri) 17:14:40)
No70422 (おにまーる さん) に返信
> foreach (var itemdll in _dll)
> {
>   var title = itemdll.TabName;
>   var tabPage = new TabPage(title);
>   tabPage.BackColor = Color.White;
>   tabPage.Name = "exte";
>     tabControl1.TabPages.Add(tabPage);
>   itemdll.レイアウト関数(this.webBrowser7, this.tabControl1, this.Controls, this.tabPage);
> }


上記のループの中から抜粋して
 var tabPage = new TabPage(title);
 tabControl1.TabPages.Add(tabPage);
 itemdll.レイアウト関数(…, this.tabPage);
の 3 行に着目してみます。

1行目は TabPage を生成しているところ、
2行目は TabControl にそれを追加しているところ、
3行目は レイアウト処理の呼び出しですよね。


この場合、2 行目の「tabPage」は、1 行目の var tabPage を指しますが、
3 行目の「this.tagPage」は「this」が修飾されているため、1行目のそれではなく、
フィールド変数 private TabPage tabPage; を指します。


> 動的に作ったtabPageを引数に入れる方法はあるでしょうか?
フィールド変数の tabPage 変数ではなく、
動的に作ったインスタンスを渡せば良いかと。

引用返信 編集キー/
■70425 / inTopicNo.4)  Re[2]: 動的につくったタブページをメソッド引数に!
□投稿者/ おにまーる (3回)-(2014/03/21(Fri) 18:29:44)
No70424 (魔界の仮面弁士 さん) に返信
No70422 (おにまーる さん) に返信

thisはフィールドのものを指すのですね!
勉強になりました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -