C# 在VisualStudio中是否有更简单的方法来显示和使用INT?

C# 在VisualStudio中是否有更简单的方法来显示和使用INT?,c#,visual-studio-2013,C#,Visual Studio 2013,我正在使用VisualStudio创建一个RPG角色创建者。我想显示属性加成,并用它们来计算伤害和命中数字。但是,我发现显示它们的唯一方法是使用文本框,这意味着每当我想进行数学运算时,我必须将文本框中的字符串转换为int,进行数学运算,然后将其转换回字符串以显示它 难道没有一个更简单的方法可以做到这一点,我只是错过了?没有“numberbox”或类似的东西吗?将用户界面和数据分开。如果您想对此主题进行更多研究:用户界面通常称为视图,数据称为模型 将统计数据保存在其本机数据类型的单独类中。也就是说

我正在使用VisualStudio创建一个RPG角色创建者。我想显示属性加成,并用它们来计算伤害和命中数字。但是,我发现显示它们的唯一方法是使用文本框,这意味着每当我想进行数学运算时,我必须将文本框中的字符串转换为int,进行数学运算,然后将其转换回字符串以显示它


难道没有一个更简单的方法可以做到这一点,我只是错过了?没有“numberbox”或类似的东西吗?

将用户界面和数据分开。如果您想对此主题进行更多研究:用户界面通常称为视图,数据称为模型

将统计数据保存在其本机数据类型的单独类中。也就是说,对于力量、灵巧度等,您将使用
int
s。对于派生值,例如装甲等级等,使用只读属性


表单应该做的唯一工作是显示这些值,并在用户更改数据时更新数据类。这样做的另一个好处是保持代码的组织性:表单只包含与用户交互相关的代码,而所有的“规则”用于计算值的工具位于数据类中。

将用户界面和数据拆分。如果您想对此主题进行其他研究:用户界面通常称为视图,数据称为模型

将统计数据保存在其本机数据类型的单独类中。也就是说,对于力量、灵巧度等,您将使用
int
s。对于派生值,例如装甲等级等,使用只读属性


表单应该做的唯一工作是显示这些值,并在用户更改数据时更新数据类。这样做的另一个好处是使代码保持条理化:表单只包含与用户交互相关的代码,而计算值的所有“规则”都在数据类中。

有一个“numberbox”。它被称为
NumericUpDown
控件。值类型为
Decimal
,不幸的是,这意味着您在
double
int
中进行计算时,仍然需要来回转换它。你可以把小数点放在任何你想要的地方,这可能是一个功能,也可能不是。。。用户无法移动小数点。

有一个“numberbox”。它被称为
NumericUpDown
控件。值类型为
Decimal
,不幸的是,这意味着您在
double
int
中进行计算时,仍然需要来回转换它。你可以把小数点放在任何你想要的地方,这可能是一个功能,也可能不是。。。用户无法移动小数点。

海因茨的回答是一个很好的建议

OTOH,如果您想要,您可以创建一个子类,该子类的作用正好相反,即将数据和视图绑定在一起

这是一个
Label
子类,它具有
int
属性和
Add
方法。您可以使用它或使用
Value
属性进行计算,当然,如果需要,还可以添加更多方法

您可以以任何方式设置它的样式,包括
图像
;我选择了一种简单的风格,请参见下文:

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";
这将导致:


海因齐的回答是好建议

OTOH,如果您想要,您可以创建一个子类,该子类的作用正好相反,即将数据和视图绑定在一起

这是一个
Label
子类,它具有
int
属性和
Add
方法。您可以使用它或使用
Value
属性进行计算,当然,如果需要,还可以添加更多方法

您可以以任何方式设置它的样式,包括
图像
;我选择了一种简单的风格,请参见下文:

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";
这将导致:


不,您不能显示数字,只能显示文本。但是你可以做的是将你的统计数据存储为数字,并且只将它们转换为文本来显示它们,使用ToString非常简单。如果您已将数字存储在数据库中,则可以在需要进行计算时从数据库中检索这些数字,这样您就不必担心将它们从文本转换回数字。如果你需要的话,这并不是很难做到的

不,您不能显示数字,只能显示文本。但是你可以做的是将你的统计数据存储为数字,并且只将它们转换为文本来显示它们,使用ToString非常简单。如果您已将数字存储在数据库中,则可以在需要进行计算时从数据库中检索这些数字,这样您就不必担心将它们从文本转换回数字。如果你需要的话,这并不是很难做到的

你的意思是,计算像“43.54356”、“21.4534”等数字(奖金)吗?这些是
float
,而不是INT。请查看和MVP,了解如何从视图中分离数据。。。虽然您所描述的是可能的,但通常数据只是通过文本框显示的,但是针对“模型”进行的计算……您始终可以对标签进行子类化,为其提供整数属性和一些计算方法,请参见下面的示例。。!你解决你的问题了吗?我解决了,我没有。这里有很多很好的信息,但在这一点上,我有点粗暴地强迫自己每次都做转换。我感谢所有的帮助,但它真正教会我的是,我需要花更多的时间学习。:)你的意思是,计算像“43.54356”、“21.4534”等数字(奖金)吗?这些是
float
,而不是INT。请查看和MVP,了解如何从视图中分离数据。。。虽然您所描述的是可能的,但数据通常只是预处理的