对象无法访问类属性

时间:2017-03-08 07:57:23

标签: c# winforms

我有一个带有几个属性的子类Button

public class ZButton : Button
{    
    private string UIB = "I";
    public int _id_ { get; set; }
    public int rowIndex { get; set; }
    protected override void OnClick(EventArgs e)
    {
        Form frmNew = new Form(UIB);
        frmNew.ShowDialog();
        base.OnClick(e);
    }
}

我将该按钮放在表单上,​​这是表单中该按钮的代码。

private void zButton1_Click(object sender, EventArgs e)
    {        
        rowIndex = dataGridView1.CurrentRow.Index;
        _id_ = Convert.ToInt16( dataGridView1["id_city", rowIndex].Value.ToString());

    }

我无法访问这些属性(rowIndex)和( id )并且编译器会出错

The name 'rowIndex' does not exist in the current context   

我对C#很陌生,所以我必须遗漏一些虚构的东西。

3 个答案:

答案 0 :(得分:3)

rowIndex_id_是您zButton的属性,无法直接在您的表单中访问它们。因此,如果您需要在click事件中访问它们,则必须将sender强制转换为zButton并访问该实例的属性。如下所示:

private void zButton1_Click(object sender, EventArgs e)
{   
    zButton but=(zButton)sender;     
    but.rowIndex = dataGridView1.CurrentRow.Index;
    but._id_ = Convert.ToInt16(dataGridView1["id_city",but.rowIndex].Value.ToString());
}

答案 1 :(得分:1)

如果方法zButton1_Click是表单类的成员,那么它可以直接访问同一个类或其祖先类的属性,而不是像按钮这样的聚合对象的属性。

要访问按钮的属性,您应该明确指定要尝试访问的对象的属性。这意味着如果要访问聚合按钮zButton1的属性,则应替换

dataGridView1["id_city", rowIndex]

dataGridView1["id_city", zButton1.rowIndex]

答案 2 :(得分:0)

将发件人转为按钮。

var button = sender as zButton;
    if (button != null)
    {
        button.rowIndex ...
        ...
    }