我使用visual studio创建了一个RPG角色创建者。我想显示统计奖金并使用它们计算损坏和命中数字等内容。但是,我发现显示它们的唯一方法是使用文本框,这意味着每当我想要数学时,我必须将文本框中的字符串转换为int,进行数学运算,然后将其转换回来进入一个字符串来显示它。
有没有一种更简单的方法可以做到这一点,我只是错过了?没有"数字框"或类似的东西?
答案 0 :(得分:3)
拆分用户界面和数据。如果您想对此主题进行其他研究:用户界面通常称为视图,数据为模型。
将您的统计信息保存在原生数据类型的单独类中。也就是说,你有int
的力量,灵巧等等。使用只读属性来获取派生值,例如护甲等等。
表单应该做的唯一工作是显示这些值,如果用户更改数据,更新数据类。这样做的另一个好处是可以保持代码的有序性:您的表单只包含与用户交互相关的代码,而所有"规则"用于计算值的数据在您的数据类中。
答案 1 :(得分:1)
有一个“数字框”。它被称为NumericUpDown
控件。值类型为Decimal
,遗憾的是,如果您在double
或int
进行计算,则仍需要来回投射。你可以把小数点放在你想要的地方,这可能是也可能不是一个特征......用户不能移动小数点。
答案 2 :(得分:0)
海因兹的回答很好。
OTOH,如果你想要,你可以创建一个相反的子类,即将数据和视图绑在一起..
这是一个Label
子类,它具有int
属性和Add
方法。您可以使用它或使用Value
属性进行计算,当然,如果需要,您可以添加更多方法..
您可以通过任何方式设置样式,包括Images
;我选择了一种简单的风格,见下文..:
class IntLabel : Label
{
int val;
public int Value
{
get { return val; }
set { val = value; Text = val.ToString(Format ); }
}
public string Format { get; set; }
public IntLabel()
{
Font = new Font("Consolas", 15f);
BackColor = Color.Brown;
ForeColor = Color.AntiqueWhite;
TextAlign = ContentAlignment.MiddleCenter;
//..
}
public IntLabel(int val, string name) : base()
{
Value = Value;
Name = name;
}
protected override void OnLayout(LayoutEventArgs levent)
{
base.OnLayout(levent);
AutoSize = false;
Size = new System.Drawing.Size(200, 30);
}
public int Add(int n)
{
Value += n;
return Value;
}
}
然后,您可以使用任一方式增加值:
intLabel1.Value += 111;
intLabel1.Add(111);
设置
后 intLabel1.Format = "Score: #####0";
这将导致:
答案 3 :(得分:0)
不,你不能显示数字,只显示文字。但你可以做的是将你的统计数据存储为数字,只将它们转换为文本以显示它们,使用ToString这很容易。如果您已存储数字,例如在数据库中,您可以在需要进行计算时从数据库中检索它们,因此您不必担心将它们从文本转换回数字。如果你需要的话,并不难以做到这一点!