【问题标题】:Get combobox selectedindex from another class in winforms [duplicate]从winforms中的另一个类获取组合框selectedindex [重复]
【发布时间】:2016-12-07 02:53:33
【问题描述】:

我有两节课。第一类是 form1,它有一个组合框和三个选项。我一直在尝试找到一种方法来从我的其他班级获取当前组合框 selectedindex,但我所有的尝试都失败了。这是我上次尝试的一些代码。

public partial class Form1 : Form
{

form2 herochoose = new form2();

public void comboBox1_SelectedIndexChanged_2(object sender, EventArgs e)
{
    heroischosen();
}

public int heroischosen()
{
    if (comboBox1.SelectedIndex == 0)
    {
        herochoose.HeroChoosen = 0;
    }
    else if (comboBox1.SelectedIndex == 1)
    {
        herochoose.HeroChoosen = 1;
    }
    else if (comboBox1.SelectedIndex == 2)
    {
        herochoose.HeroChoosen = 2;
    }

    return herochoose.HeroChoosen;
  }

}

从表格 2 开始

public partial class form2 : Form
{
   private int _heroChoice;

   public int HeroChoosen
   {
        get { return _heroChoice; }
        set { _heroChoice = value; }
   }

   protected override void OnPaint(PaintEventArgs e)
   {
       if (_heroChoice == 0)
       {
           Console.WriteLine("herochoice1");
       }
       else if (_heroChoice == 1)
       {
           Console.WriteLine("herochoice2");                   
       }
       else if (_heroChoice == 2)
       {
           Console.WriteLine("herochoice3");   
       }
     }
  }

当 form1 处于活动状态时,它表明在组合框中正确选择了每个选项,但是当我启动 form2 时,它永远不会保留组合框选项。如果我遗漏了一些非常简单的东西,我很抱歉。

谢谢。

【问题讨论】:

  • 如何启动form2,我在给定的代码中找不到任何herochoose.Show()
  • 您是否尝试过调试并在 Form1 中的方法 'heroischosen' 中放置断点?
  • 正如@un-lucky 所说。为此,您需要从 form1 启动表单 2。如果这不可能,您将需要其他方式在表单之间传递数据。 Singleton 模式在游戏编程中非常流行,用于维护整个游戏中使用的状态变量集合。

标签: c# winforms combobox


【解决方案1】:

给你简单的修复,在Form2的构造函数中获取值,这样你就可以用简单的方式来使用了:

public partial class form2 : Form
{
    private int _heroChoice;

    public int HeroChoosen
    {
        get { return _heroChoice; }
        set { _heroChoice = value; }
    }
    // constructor
    public form2(int selectedItem)
    {
       HeroChoosen = selectedItem;
       // Now you can use HeroChoosen 
    }
    // Rest of codes here
}

如果是这样,调用方法将是这样的:

public void comboBox1_SelectedIndexChanged_2(object sender, EventArgs e)
{
   form2 herochoose = new form2(heroischosen()); 
   // the return value from heroischosen will be passed to the form 2
   // and are handled their in form2's constructor
   herochoose .Show();
}

【讨论】:

  • 谢谢!做到了。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多