2015-07-02 4 views
1

Я использую кнопку в классе. Когда кнопка нажата, она должна вызывать процедуру с соответствующим текстом кнопки. Как преобразовать отправителя в String_Entry? Кроме того, я довольно новичок в отношении объектно-ориентированного/классного программирования, поэтому комментарии приветствуются.Получение доступа к родительскому элементам Button

public class String_Entry 
{ 
    public TextBox textbox; 
    public Button send; 
    // other stuff 

    public String_Entry() 
    { 
     textbox = new TextBox(); 
     send = new Button(); 
     send.Click += new System.EventHandler(this.bSend_Click); 
     // put in GUI, set parameters and other stuff 
    } 

    // other stuff 

    private void bSend_Click(object sender, EventArgs e) 
    { 
     // Trying to get the corresponding String_Entry from the Button click event 
     Button cntrl = (Button)sender; 
     String_Entry entry = (String_Entry)(cntrl.Parent); 

     parse.ProcessHexLine(entry); 
    } 
} 
+0

Почему бы вам просто не пройти «это»? – germi

+0

Посмотрите https://msdn.microsoft.com/en-us/library/system.windows.forms.control.parent%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 Родительское свойство. Вы не используете его должным образом. Также проверьте свойство Tag. –

ответ

3

Ваше решение для инкапсуляции кнопки с текстовым полем и обработчиком событий является звуковым. Он просто идет неправильно в обработчик события:

private void bSend_Click(object sender, EventArgs e) 
{ 
    Button cntrl = (Button)sender; 
    String_Entry entry = (String_Entry)(cntrl.Parent); 

    parse.ProcessHexLine(entry); 
} 

Во-первых, нет никакого смысла делать что-либо с sender, как это будет так же, как поле send. Следующий cntrl.Parent предоставит вам ссылку на форму или другой объект-контейнер, содержащий кнопку, а не этот экземпляр String_Entry. Чтобы получить доступ к этому, используйте this. Таким образом, вы можете изменить обработчик событий на:

private void bSend_Click(object sender, EventArgs e) 
{ 
    parse.ProcessHexLine(this); 
} 
Смежные вопросы