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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.70422 の関連記事表示

<< 0 >>
■70422  動的につくったタブページをメソッド引数に!
□投稿者/ おにまーる -(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);
    はエラーがでます。
親記事 /過去ログ120より / 関連記事表示
削除チェック/

■70423  Re[1]: 動的につくったタブページをメソッド引数に!
□投稿者/ Azulean -(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
記事No.70422 のレス /過去ログ120より / 関連記事表示
削除チェック/

■70424  Re[1]: 動的につくったタブページをメソッド引数に!
□投稿者/ 魔界の仮面弁士 -(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 変数ではなく、
    動的に作ったインスタンスを渡せば良いかと。
記事No.70422 のレス /過去ログ120より / 関連記事表示
削除チェック/

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

    thisはフィールドのものを指すのですね!
    勉強になりました。
記事No.70422 のレス / END /過去ログ120より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -