2017-02-09 10 views
0

maxColumnsの値を他のアイテムが繰り返し使用するメソッドに渡す必要があります。このシナリオでは、どうすればmaxColumnsを渡すことができますか?イベントと一緒に変数を渡すのが難しい

public partial class ValResults : Form 
{ 
    public ValResults() 
    { 
     InitializeComponent(); 
     this.Table1Requirements(); 

    } 

    private void Table1Requirements() 
    { 
     int maxColumns = 6; 
     this.table1LayoutPanelPrime.CellPaint += new TableLayoutCellPaintEventHandler(tableLayoutPaint); 

    } 

    void tableLayoutPaint(object sender, TableLayoutCellPaintEventArgs e) 
    { 
     for (int i = 0; i < maxColumns; i++) 
     { 
      if (e.Row == 0 && e.Column == i) 
      { 
       Graphics g = e.Graphics; 
       Rectangle r = e.CellBounds; 
       g.FillRectangle(Brushes.LightGray, r); 
      } 
     } 
    } 
} 
+1

異なる最大列設定で扱うパスが何にありますか?私はあなたがC#の可変スコープとメソッドと引数を読むことをお勧めします。あなたの投稿コードでは、 'maxColumns'が0(デフォルト値)になるため、ループは実行されません。 – Tim

+0

合計で5つのテーブルがあり、すべて同じヘッダーが強調表示されている必要があります。貼り付けコードをコピーするのではなく、私は同じループを使うことを望んでいました。今私は7にハードコードされたループを持っていますが、これは次のセクションでは動作しません。 アレックス、そうですね、私がやろうとしていることです。私はそれを行うことができない場合、私はそれが可能かどうかを確認するために手を差し伸べることはできません。 – Rygar

+0

ループは必要ありません。ちょうど 'if(e.Row == 0 && e.Column Slai

答えて

0

あなたは基本的に事前...

private void Table1Requirements() 
    { 
     int maxColumns = 6; 
     this.table1LayoutPanelPrime.CellPaint += new TableLayoutCellPaintEventHandler(tableLayoutPaint(maxColumns)); 

    } 

    Action<object,TableLayoutCellPaintEventArgs> tableLayoutPaint(int columns) 
    return (sender, e) => 
    { 
     for (int i = 0; i < columns; i++) 
     { 
      if (e.Row == 0 && e.Column == i) 
      { 
       Graphics g = e.Graphics; 
       Rectangle r = e.CellBounds; 
       g.FillRectangle(Brushes.LightGray, r); 
      } 
     } 
    } 

をラムダを使用して関数を構築することができますが、別のイベントを発生させることができる方法は

1

同じクラスの場合は、変数をクラスレベルで定義するだけです。

private int _maxColumns; 
public ValResults() 
    { 
     InitializeComponent(); 
     this.Table1Requirements(); 
     SetColumnCount(); 
    } 

private void SetColumnCount(){ 
    _maxColumns= 6; 
} 

void tableLayoutPaint(object sender, TableLayoutCellPaintEventArgs e) 
    { 
     for (int i = 0; i < _maxColumns; i++) 
     { 
      if (e.Row == 0 && e.Column == i) 
     { 
       Graphics g = e.Graphics; 
       Rectangle r = e.CellBounds; 
       g.FillRectangle(Brushes.LightGray, r); 
     } 
     } 
    } 
+0

異なるmaxColumnsを持つ異なるシナリオでハンドラを再利用したいと思っていたと思います –

関連する問題