如何将对象传递给c#中的事件处理程序?

时间:2016-03-13 01:33:55

标签: c# events event-handling

public void Button_Click(object sender, RoutedEventArgs e)
    {
        TextBlock authorText = new TextBlock();
        authorText.Text = "Saturday Morning";
        authorText.FontSize = 12;
        authorText.FontWeight = FontWeights.Bold;
        authorText.PreviewMouseDown += new MouseButtonEventHandler(test1);
        authorText.Visibility = System.Windows.Visibility.Collapsed;

        Grid.SetColumn(authorText, 0);

        sp_s.Children.Add(authorText);
    }


void sampleDropDown(object sender, RoutedEventArgs e)
    {

    }

我希望能够访问sampleDropDown事件处理程序中的authorText对象。  将对象声明移到Button_Click方法的范围之外不是有效的解决方案,因为我需要在每次单击按钮时创建一个新对象。

1 个答案:

答案 0 :(得分:0)

  

我需要在每次点击按钮时创建一个新对象

如果您确实需要一个新对象,您仍然可以在类级别保存对集合中每个对象的引用。然后,在每个Button_Click处理程序中创建一个新对象并将其添加到列表中。

List<TextBlock> authorTextList = new List<TextBlock>();

public void Button_Click(object sender, RoutedEventArgs e)
{
    TextBlock authorText = new TextBlock();
    authorTextList.Add(authorText);

    /// ...
}

void sampleDropDown(object sender, RoutedEventArgs e)
{
    /// ... access List objects here as desired
}

但看起来您可能已经有了authorText对象的列表:

sp_s.Children.Add(authorText);

authorText的引用保存在sp_s.Children中。除非在sampleDropDown()处理程序中需要之前删除引用,否则您可以在那里访问它。