Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 随事件传递变量的困难_C# - Fatal编程技术网

C# 随事件传递变量的困难

C# 随事件传递变量的困难,c#,C#,我需要将maxColumns的值传递给一个将被其他项重复使用的方法。在这种情况下,如何传递maxColumns public partial class ValResults : Form { public ValResults() { InitializeComponent(); this.Table1Requirements(); } private void Table1Requirements() {

我需要将
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要求();
}
私人作废表1要求()
{
int maxColumns=6;
this.table1LayoutPanelPrime.CellPaint+=新的TableLayoutCellPaintEventHandler(tableLayoutPaint);
}
void tableLayoutPaint(对象发送器,TableLayoutCellPaintEventArgs e)
{
对于(int i=0;i
如果它在同一个类中,只需在类级别定义变量即可

 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);
        }
        }
    }
private int\u maxColumns;
公开结果()
{
初始化组件();
本表1要求();
SetColumnCount();
}
私有void SetColumnCount(){
_maxColumns=6;
}
void tableLayoutPaint(对象发送器,TableLayoutCellPaintEventArgs e)
{
对于(int i=0;i<\u maxColumns;i++)
{
如果(e.Row==0和e.Column==i)
{
图形g=e.图形;
矩形r=e.CellBounds;
g、 圆角矩形(浅灰色,r);
}
}
}

您基本上可以使用lambdas预构建函数

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);
            }
        }
    }
private void表1要求()
{
int maxColumns=6;
this.table1LayoutPanelPrime.CellPaint+=新的TableLayoutCellPaintEventHandler(tableLayoutPaint(maxColumns));
}
Action tableLayoutPaint(int列)
返回(发件人,e)=>
{
对于(int i=0;i

这样,您可以使用不同的最大列设置生成不同的事件句柄

传递到什么?我建议您仔细阅读C#中的变量范围,以及方法和参数。现在,您发布的代码、循环将不会运行,因为
maxColumns
将为0(默认值)。总共有5个表需要突出显示相同的标题。我希望使用相同的循环,而不仅仅是复制粘贴代码。现在我已经将循环硬编码为7,但是这在接下来的部分中不起作用。亚历克斯,是的,这就是我想做的。如果我做不到,我也做不到,只是伸手看看是否可行。不需要循环。如果(e.Row==0&&e.Column认为您遗漏了一点,即他们希望在具有不同maxColumns的不同场景中重用处理程序