c# - 如何将复选框,日期时间选择器和文本框值转换为整数

时间:2015-04-30 01:13:24

标签: c# winforms button

感谢那些回复的人,你的解决方案就在眼前! @ to messageboard ..apology用于重载问题而不是特定的。

我一直在试验我作为解决方案提供的内容,为了保持一致,根据所提供的解决方案,我有以下代码:

var mystr = String.Format("{0},{1:yyyy,M,d,H,m,s},{2:yyyy,MM,dd,HH,mm,ss},{3},{4},{5},{6},{7},{8},{9},{10}",
                this.textBox3.Text,    //0
                this.dateTimePicker1.Value,//1
                    this.dateTimePicker2.Value,//2
                    Convert.ToInt32(this.checkBox1.Checked),//3
                    Convert.ToInt32(this.checkBox2.Checked),//4
                    Convert.ToInt32(this.checkBox3.Checked),//5
                    Convert.ToInt32(this.checkBox4.Checked),//6
                    Convert.ToInt32(this.checkBox5.Checked),//7
                    Convert.ToInt32(this.checkBox6.Checked),//8
                    Convert.ToInt32(this.checkBox7.Checked),//9
                    Convert.ToInt32(this.checkBox8.Checked));//10

            textBox1.Text = mystr;
            MessageBox.Show("The value entered is:  " + mystr , " Alarm DATA", MessageBoxButtons.OK);

点击OK按钮后,我有一串值,即: 88,2015,5,17,22,6,53,2015,05,17,22,06,53,0,0,0,0,0,0,0,0

我将通过串口将这些发送到Arduino,问题在于它们目前的格式。

arduino期望它们的格式(数据类型)与从串行终端窗口发送的格式相同,并且不添加换行符。 (当我键入88,2015,5,17,22,6,53,2015,05,17,22,06,53,0,0,0,0,0,0,0,0时,目前正在工作进入串行终端窗口。

我的问题是如何将变量mystr的值设置/更改为arduino需要的值?

我目前在Arduino上使用Serial.parseint()来接收用逗号分隔的值并将它们加载到变量中。

非常感谢任何帮助。

d

  

供参考..这是我原来的问题:

     

我创建了一个Windows窗体,目前有9个复选框(I   不知道这是不是正确的选择。)以及一个按钮和2   文本框。

     

目前,我以文本框的形式输入日期   YYYY,MM,DD,hh,mm,ss然后我选择复选框值,当时   如果未选中,则选择应返回1。

     

我意识到这似乎是一个非常基本的问题,但我似乎无法做到   找到我正在寻找的答案。

     

当我点击按钮时,我希望发生以下情况:

     

生成/创建单个字符串get。 (最终我会发送这个   通过串口输出。 (不确定这是否是我应该的变量类型   使用,如果可能的话,我会很感激和示例。

     

字符串/ int / message包含两个日期(或作为unix   时间戳或任一选项)和每个复选框值(a   0或1)<<这是我在努力寻找信息的地方   日期时间选择器)

     

所以实际的字符串看起来像这样:   2015,4,30,3,0,5,2015,4,30,3,0,10,0,1,0,0(格式为   DATE1,DATE2,checkbox1,checkbox2,checkbox3,checkbox4)

     

我目前可以使用checkbox.text字段,但我更喜欢   只需将每个值作为零或1来构建我的   串/ INT /消息。

     

我正在使用C#VS express。

2 个答案:

答案 0 :(得分:1)

首先,我建议使用DateTimePicker输入日期和时间。您可以让它显示您喜欢的任何格式,它将为您处理验证,这可确保用户永远不会输入无效格式或无效值。然后你可以做这样的事情:

var str = String.Format("{0:yyyy,M,d,H,m,s},{1:yyyy,M,d,H,m,s},{2},{3},{4}",
                        this.dateTimePicker1.Value,
                        this.dateTimePicker2.Value,
                        Convert.ToInt32(this.checkBox1.Checked),
                        Convert.ToInt32(this.checkBox2.Checked),
                        Convert.ToInt32(this.checkBox3.Checked));

如果你想要更通用的东西,试试这个:

var dates = this.Controls.Cast<Control>()
                         .OfType<DateTimePicker>()
                         .Select(dtp => dtp.Value.ToString("yyyy,M,d,H,m,s"));
var bools = this.Controls.Cast<Control>()
                         .OfType<CheckBox>()
                         .Select(cb => Convert.ToInt32(cb.Checked).ToString());
var str = String.Join(",", dates.Concat(bools).ToArray());

这适用于任意数量的控件和任何名称。需要注意的是,每组控件的z顺序必须与您希望其输出显示在最终String中的顺序相匹配。您可以通过在“文档大纲”窗口中拖放来调整z顺序,该窗口可以从“视图”&gt;中打开。其他Windows菜单。

答案 1 :(得分:0)

string s = null;

if (checkbox.checked)
    s = "1";
else
    s = "0";