【问题标题】:Trying to inherit MainWindow into subclass but get system stackoverflow试图将 MainWindow 继承到子类中但得到系统 stackoverflow
【发布时间】:2019-04-26 08:23:12
【问题描述】:

如何在事件处理方法中通过引用发送变量?

我尝试使用委托将其发送到另一个保存我需要的变量的函数并且它可以工作。但是,它会创建变量的副本,并且我无法从委托函数更改主类中的值。然后我考虑将函数移动到一个类并将所有变量存储在类中,以便它们可以获取和设置。但是,因为它是一个类并且不继承主类,所以无法找到 WPF/XAML 对象。我尝试过继承主类,但是因为我在主类中创建了这个类,并且它有效地继承了自身,所以它进入了一个无法逃脱的循环。

public partial class MainWindow : Window
{

    public class Program : MainWindow
    {
        public string Word { get; set; }

        public void WhenPressed_1(object sender, RoutedEventArgs e)
        {
            lable_1.Content = Word;
        }
    }
    public MainWindow()
    {            
        InitializeComponent();

        Program test = new Program();
        Button_1.Click += delegate (object sender, RoutedEventArgs e) { test.WhenPressed_1(sender, e); };
    }       
}

它位于 Program test = new Program();它打破了。

【问题讨论】:

  • 我猜你有一个意外的循环/递归 -> 通过创建 new Program 将创建一个 new MainWindowclass,因为 Program 继承自它并在 MainWindow 内部创建一个新的Program(并且创建/循环重新开始,直到没有更多的“内存空间”剩下 -> stackoverflow)
  • 当您从主窗口单击一个按钮时,您需要在另一个类中进行一些处理,然后您需要更改主窗口的标签内容??
  • 我刚刚使用了一个标签(WPF 对象)来测试代码,看看会发生什么。我想要做的是有一个事件处理程序(如点击事件),然后做一些代码。该代码需要一些变量,这些变量存储在主窗口中但无法访问。

标签: c# wpf oop inheritance


【解决方案1】:

您可以将 MainWindow 对象传递给程序类并更改您想要的值

   public partial class MainWindow : Window, ICommon
{

    public MainWindow()
    {
        InitializeComponent();
        Program test = new Program();
        thisButton.Click += delegate(object sender, RoutedEventArgs e) { test.WhenPressed_1(this); };
    }

    public void SetValueInMain()
    {
        // Set Main values
    }

    public class Program
    {
        public string Word { get; set; }
        public void WhenPressed_1(ICommon mainWind)
        {
            mainWind.SetValueInMain();
        }
    }
}

public interface ICommon
{
    void SetValueInMain();
}

【讨论】:

  • 问题是我不想在单击按钮时创建一个新类。该类是一个单例样式类,它将保存整个程序所需的数据。我需要在程序启动后立即访问数据(如在主窗口中)。对不起,如果问题跳过了,因为我简化了它。
  • @AndrewFoot 然后你可以声明程序 test = new Program();在 Mainwindow 内并访问整个 MainWindow?
  • @AndrewFoot 不太清楚..用接口编辑了代码
  • 谢谢。我之前是个白痴,没看到你做了什么。感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多