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