我有这个代码初始化winforms文本框。
txt0.Text = steps[0];
txt1.Text = steps[1];
txt2.Text = steps[2];
txt3.Text = steps[3];
我想像这样概括一下:
for (int i = 0; i < steps.Length; i++)
{
txti.Text = steps[i];
}
显然这不起作用,因为the name txti does not exist in current context
。
如何使它工作?
编辑: 我想避免在代码中创建所有文本框和图片框,并将它们添加到代码中的tablelayoutpanel。
答案 0 :(得分:2)
你可以用反射来做,但我不建议它来解决这个任务。
而是有一个List并循环遍历它。
List<TextBox> textBoxes = new List<TextBox> {txt0,txt1,txt2,txt3};
for (int i = 0; i < textBoxes.Length; i++)
{
textBoxes[i].Text = steps[i];
}
答案 1 :(得分:1)
原始问题中的代码可以概括如下。
var TextBoxes = new TextBox[]{ txt0, txt1, txt2, txt3 };
for (int i = 0; i < TextBoxes.Length; i++)
{
TextBoxes[i].Text = steps[i];
}
答案 2 :(得分:1)
您可以执行类型转换以动态引用文本框。
for (int i = 0; i < steps.Length; i++)
{
TextBox txt = this.FindControl("txt" + i.ToString()) as TextBox;
txt.Text = steps[i];
}
答案 3 :(得分:1)
您可以尝试按名称查找控件:
for (int i = 0; i < steps.Length; i++)
Controls.Find("txt" + i, true)[0].Text = steps[i];
答案 4 :(得分:1)
由于它是WinForms
,您可以使用Name
的{{1}}属性。
TextBox
您for( int i = 0; i < steps.Length; i++ )
{
TextBox tBox = this.Controls.OfType<TextBox>().FirstOrDefault(t => t.Name == "txt" + i);
if(tBox == null) break;
tBox.Text = steps[i];
}
的 Name
属性与您使用的变量名称相对应,这意味着如果您将Control
称为TextBox
,则其名称为{{1}使用此名称可以很容易地从它的父txt0
中检索。
答案 5 :(得分:1)
Winforms有&#34;对&#34;用于显示集合数据的控件 - 例如import React from 'react';
import ReactDOM from 'react-dom';
const CardView = React.createClass({
render() {
var fontFamily = this.props.fontFamily;
var fontSize = this.props.fontSize;
var coinName = this.props.coinName;
var Type = this.props.type;
var longTextList = this.props.data.map(function(text, index){
return <Type key={index} style={fontSize} ><div style={fontFamily}><img src={text.sprite} />{text.longText} and get {coinName}(s)</div></Type>;
});
return (
<div>{longTextList}</div>
);
}
});
export default CardView;
。
DELETE t
FROM (SELECT TOP (1) uph.*
FROM dbo.userPasswordHistory uph
WHERE UserId IN (SELECT Id
FROM dbo.user
WHERE LogonId = @UserLogonId
)
ORDER BY LastModifiedTime DESC
) t;
DataGridView
将生成行和一列,其中包含yourDataGridView.DataSource = steps.ToList();
的值。对于自动生成列,您需要确保DataGridView
- (默认情况下为steps
)
你可以&#34;风格&#34;使用yourDataGridView.AutoGenerateColumns = true
属性或其他属性生成单元格。
如果您需要显示图片以外的文字,那么true
似乎&#34;对&#34;选择。
创建一个表示步骤
DataGridView.DefaultCellStyle
DataGridView
应为public class Step
{
public string Name { get; set; }
public Image StatusImage { get; set; }
}
// Create collection
var steps = new List<Step>
{
new Step { Name = "One", StatusImage = image1 },
new Step { Name = "Two", StatusImage = image1 },
new Step { Name = "Three", StatusImage = image1 }
}
yourDataGridView.DataSource = steps;
属性生成DataGridView
。
如果您有DataGridViewImageColumn
的枚举而不是图片。然后,您可以使用StatusImage
事件将枚举转换为图像。