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

我是一个学C#的VB高手。我似乎已经掌握了诀窍,但是我有几个关于我正在编写的代码的问题

在这里的第一个例子中,当我这样编写代码时,我遇到了一个错误:

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的位置。