【发布时间】:2020-06-27 07:03:33
【问题描述】:
我的目标是创建 2 个 Numeric Up Down 控件以在网球中保持得分。所以我必须重写 Numeric Up Down 控件类,但是我不确定如何创建事件或从其他控件的事件中引用这些自定义控件的属性。
我通过这种技术 (https://stackoverflow.com/a/5921599/10886205) 创建了 2 个自定义控件,它允许我从 0、15、30 跳转到 40,并在超过 40 后将文本值放入其中。
但是,Visual Studio的Designer Interface中不存在该控件,所以(因为我是一个“业余程序员”)我不知道如何创建一个事件,例如ValueUp,ValueDown,ValueChanged , 或者如何从任何其他事件更改控件的任何属性,例如值或文本,除了在覆盖事件中使用“this”关键字。但是,这并不能真正帮助我以编程方式链接控件,因此当一个玩家处于“Adv”时,另一个玩家处于“-”,或者当一个玩家达到“Deuce”时,另一个玩家是也在“Deuce”中。 (我试图使用标签和变量,但我认为这是一个死胡同。)
public partial class Form1 : Form
{
public class NumericUpDownEx : NumericUpDown
{
string tennisAdv = "none";
string whichNumUpDown = "unknown";
public void Form1() { }
public override void UpButton()
{
if (Value == 0) Value = 15;
else if (Value == 15) Value = 30;
else if (Value == 30) Value = 40;
else base.UpButton();
}
public override void DownButton()
{
if (Value == 40) Value = 30;
else if (Value == 30) Value = 15;
else if (Value == 15) Value = 0;
else base.DownButton();
}
protected override void UpdateEditText()
{
if (Value > 40 & Value % 2 == 0)
this.Text = "Deuce";
else if (Value > 40 & Value % 2 != 0)
this.Text = "Adv";
else this.Text = this.Value.ToString();
}
}
public Form1()
{
//create a custom UpDown for Tennis Points
//Tennis Away Points
NumericUpDown mynumTennisAwayScorePoints = new NumericUpDownEx
{
Location = new Point(249, 33),
Size = new Size(52, 20),
Minimum = 0,
Maximum = 1000
};
//Tennis Home POints
NumericUpDown mynumTennisHomeScorePoints = new NumericUpDownEx
{
Location = new Point(249, 32),
Size = new Size(52, 20),
Minimum = 0,
Maximum = 1000
};
//create all other standard componets for the form
InitializeComponent();
//place the two custom UpDowns
((System.ComponentModel.ISupportInitialize)(mynumTennisAwayScorePoints)).BeginInit();
((System.ComponentModel.ISupportInitialize)(mynumTennisHomeScorePoints)).BeginInit();
panel19.Controls.Add(mynumTennisAwayScorePoints);
mynumTennisAwayScorePoints.Tag = "away";
panel20.Controls.Add(mynumTennisHomeScorePoints);
mynumTennisHomeScorePoints.Tag = "home";
}
}
此时,我有 2 个自定义控件,它们按顺序给出值(0、15、30、40、Adv、Deuce、Adv、Deuce 等),但我有点卡在那里。
【问题讨论】:
标签: c# .net visual-studio winforms