C# 关于从VB重写的问题
我是一个学C#的VB高手。我似乎已经掌握了诀窍,但是我有几个关于我正在编写的代码的问题 在这里的第一个例子中,当我这样编写代码时,我遇到了一个错误:C# 关于从VB重写的问题,c#,C#,我是一个学C#的VB高手。我似乎已经掌握了诀窍,但是我有几个关于我正在编写的代码的问题 在这里的第一个例子中,当我这样编写代码时,我遇到了一个错误: Irowindex = sF1411BindingSource.Find(sF1411DataSet.SF1411.Columns(groupBox4.Tag.ToString).ToString, textBox1.Text); if (Irowindex == -1) 错误1“System.Data.DataTable.Col
Irowindex = sF1411BindingSource.Find(sF1411DataSet.SF1411.Columns(groupBox4.Tag.ToString).ToString, textBox1.Text);
if (Irowindex == -1)
错误1“System.Data.DataTable.Columns”是一个“属性”,但与“方法”C:\11180\u应用程序\11180\u应用程序\Edit.cs 186 71 11180\u应用程序一样使用
我的另一个问题是,在VB中我使用标记,但在C中,它似乎不喜欢它们:
//Set the find label to display the new find column
groupBox4.Text = "Find - " + sender.Tag.ToString + ":";
//Store the sort column name in lblFind's Tag property
groupBox4.Tag = sender.Tag.ToString;
错误4“对象”不包含“标记”C:\11180\u应用程序\11180\u应用程序\Edit.cs 211 36 11180\u应用程序的定义
有什么想法吗 那里需要方括号(索引器)。根据
[]
而不是()
您需要将索引访问器(在VB.Columns(…)中)替换为使用方括号的C#语法
.Columns[...]
至于另一个错误。听起来您的控件是作为对象键入的(在VB中是后期绑定的)。您需要更改控件定义以使用完整类型(或至少更改控件)。。。或强制转换来控制使用ToString()
而不是ToString
。这是一种方法
此外,列是一个集合,访问是通过索引进行的,在这种情况下,您需要使用[]而不是()。ToString后面应该有括号
foo.ToString()
请尝试
Columns[groupBox4.Tag.ToString()]
查找第一个错误
关于标记,在C#中,发送方属于Object类型,并且没有标记属性。首先尝试将其强制转换为控制:
((Control)sender).Tag
所有方法调用都应该具有
()
,例如ToString()
所有索引器都应该有[]
w.g.Columns[…]
此外,您可能还必须键入case-sender,如
((TextBox)sender)。Text
对于第二个问题,sender
可能是某个事件处理程序的参数
protected void HandlerName(object sender, EventArgs e) { ... }
如果是这种情况,并且希望将sender用作其他类,则需要按如下方式强制转换它:
YourClass mySender = sender as YourClass;
if (mySender != null) {
// Do your handling here
}
根据@gabrielVa的以下评论,修订代码为:
private void radioButton1_CheckedChanged(object sender, EventArgs e){
RadioButton radioSender = sender as RadioButton;
if (radioSender != null){
sF1411BindingSource.Sort = radioSender.Tag.ToString();
sF1411BindingSource.MoveFirst();
//Set the find label to display the new find column
groupBox4.Text = "Find - " + radioSender.Tag.ToString() + ":";
//Store the sort column name in lblFind's Tag property
groupBox4.Tag = radioSender.Tag.ToString();
textBox1.ReadOnly = false;
}
}
private void radioButton1_CheckedChanged(object sender,EventArgs e){sF1411BindingSource.Sort=sender.Tag.ToString();sF1411BindingSource.MoveFirst();//设置查找标签以显示新的查找列groupBox4.Text=“find-”+sender.Tag.ToString()+”:“;//将排序列名存储在lblFind的标记属性groupBox4.Tag=sender.Tag.ToString();textBox1.ReadOnly=false;}我已经编辑了我的答案以合并处理程序的代码。//Irowindex=INVENTORYMASTERBindingSource.Find(_MISINVENTORYDataSet.RCCMIS2.Columns(“新资产标记”).ToString,TextBox13.Text)Irowindex=sF1411BindingSource.Find[(sF1411DataSet.SF1411.Columns[groupBox4.Tag.ToString()].ToString,textBox1.Text];如果(Irowindex=-1)获取san)预期my.ToString的位置是其他人提到的位置,.ToString()是一个方法,需要在它后面加括号。您已经编写了
.ToString
,但是需要将其写成.ToString()
谢谢大家!现在只有一个错误,Irowindex=sF1411BindingSource.Find[(sF1411DataSet.SF1411.Columns[“QuoteNumber”].ToString)textBox1.Text;如果(Irowindex=-1)错误是:错误1语法错误,']'预期-我有textBox1.text的位置。