【问题标题】:Trying to change a label using a static method尝试使用静态方法更改标签
【发布时间】:2013-09-05 19:17:32
【问题描述】:

我有两个表单 Form1,其中包含 CharStats 类和 Mainform,其中包含 MainForm 类。 MainForm 有一个与之关联的标签 pcNameLabelCharStats 包含一个按钮,该按钮应该在单击时更改 pcNameLabel.Text。因为我在表单和类之间进行通信,所以我在MainForm 内部设置了一个静态方法SetInfo(),它由CharStats 内部的方法StatTransfer() 调用。除了我不能从静态方法SetInfo() 内部修改pcNameLabel.Text 之外,整个事情几乎都正常工作,因为静态非静态事物。那么我该怎么做呢。

Mainform(我删掉了一些处理变量的不相关数据)

public partial class MainForm : Form
    {
        int statHolder;
        int statAdjuster;
        string healthHolder;
        int finalHealth;
        int diceOut;
        int maxDice;
        int healingOnOff = 0;
        int pcOrEn = 0;
        int turnCount = 0;
        int diceType;
        int diceResult;
        public static int formInit = 0;
        public static string VariableLabel1;
        public static string Variable2;

        Random _r = new Random();


        public MainForm()
        {

            CharStats form = new CharStats();
            form.Show();

            InitializeComponent();
        }

        public static void SetInfo()
        {
            Variable2 = VariableLabel1;
            pcNameLabel.Text = Variable2;   
        }
    }

Form1(也删减变量处理数据)

public partial class CharStats : Form
    {
        string name = "";
        string health = "";
        string mana = "";
        string strength = "";
        string agility = "";
        string intelligence = "";


        public CharStats()
        {

            InitializeComponent();
        }

        void Fighter()
        {
        name = "Reginaldxxxxxxx";
        health = "200";
        mana = "50";
        strength = "16";
        agility = "12";
        intelligence = "6";
        }

        public void StatTransfer()
        {
            MainForm.VariableLabel1 = Name;
            MainForm.formInit = 1;
            MainForm.SetInfo();
        }

        void FighterButtonClick(object sender, EventArgs e)
        {
            Fighter();
            StatTransfer();
        }
    }

【问题讨论】:

  • 那么您要更改表单的哪个instance 文本?我根本不清楚SetInfo 首先应该是静态的。
  • 当它不是静态的时,我无法从 form1 访问它。文本在主窗体中
  • 你需要在MainForm一个实例上调用它。这才是重点。 Form1(显然实际上称为CharStats)应该有一个MainForm 的实例,以便操作该实例。想象一下同时显示了两个 MainForm 实例 - 怎么会知道要更改哪种形式?
  • 我对实例不太熟悉,但我确实理解你的意思。如果我理解正确,我需要稍微改变一下。我没有在 Form1 中调用 MainForm 的实例(该表单称为 form 1,它有一个名为 CharStats 的类),我只是尝试过,而不是什么都不做,而是创建了 form1 的重复窗口,我认为如果我在 MainForm 中创建CharStats 的实例,事情可能会更好。我将尝试转换它,然后我会看看它是如何工作的。 (通过添加一个按钮来调用 CCharStats 我的意思是
  • 它现在不会抛出错误或导致奇怪的错误(有一个按钮可以调用CharStats,但它什么也没做。我会继续困惑。

标签: c# label static-methods


【解决方案1】:

你的问题似乎是观察者模式的一个很好的候选者。查看详情here

【讨论】:

    【解决方案2】:

    试试这个

    公共部分类 MainForm : Form { .....

        public MainForm()
        {
    
    
            InitializeComponent();
    
    //=====>Be careful change initial order between InitializeComponent
    
            CharStats form = new CharStats();
            form.Show();
        }
    
        public void SetInfo()
        {
            Variable2 = VariableLabel1;
            pcNameLabel.Text = Variable2;   
        }
    }
    

    而且是第二种形式

    public partial class CharStats : Form
        {
    .....
     public void StatTransfer()
            {
                MainForm parentForm = this.parentForm;
                parentForm.formInit = 1;
                parentForm.SetInfo();
            }
    ......
    }
    

    【讨论】:

    • 我会试试的,不过有一个问题。 parentForm 来自哪里/我应该在哪里添加它?
    • 所以当我尝试使用它时,我的调试器不应该这么说'charactertest.CharStats' does not contain a definition for 'parentForm' and no extension method 'parentForm' accepting a first argument of type 'charactertest.CharStats' could be found (are you missing a using directive or an assembly reference?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    相关资源
    最近更新 更多