c# - 如果 TextBox 为特定值,则将 dateTimePicker 设置为 Null

标签 c# mysql forms

我有一个链接到 MySQL 数据库的表单。 我希望表单上有 3 个 dateTimePicker 以允许三个日期,但是,如果未选择一个,我希望该选取器显示为空白,而不是当前日期。

我正在使用以下代码,当我更改日期时,出现错误“System.Windows.Forms.dll 中发生了类型为‘System.StackOverflowException’的未处理异常”选择器。

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    if (txtdateTimePicker1.Text != "1/1/2000 12:00:00 AM")
    {
        dateTimePicker1.Format = DateTimePickerFormat.Short;
        dateTimePicker1.Text = txtdateTimePicker1.Text;
    }
    else
    {
        dateTimePicker1.Format = DateTimePickerFormat.Custom;
        dateTimePicker1.CustomFormat = " ";
        dateTimePicker1.Text = "";
    }
}

故障排除提示告诉我:确保没有无限循环或无限递归。

基本上,文本框“txtdateTimePicker1”填充表单加载时的日期值,如果读取特定日期,“dateTimePicker1” " 显示空值。

我认为循环发生是因为它查看txtdateTimePicker1的值,然后更改dateTimePicker1的值,从而导致它再次触发ValueChanged事件,但是我现在知道还有其他方法可以正确触发该事件。有没有办法使用 While 循环来代替?有句话说:

While (txtdateTimePicker1.Text == "1/1/2000 12:00:00 AM")
{
    dateTimePicker1.Format = DateTimePickerFormat.Custom;
    dateTimePicker1.CustomFormat = " ";
    dateTimePicker1.Text = "";
}

但是

if (txtdateTimePicker1.Text != "1/1/2000 12:00:00 AM")
{
    dateTimePicker1.Format = DateTimePickerFormat.Short;
    dateTimePicker1.Text = txtdateTimePicker1.Text;
}

我对 While 循环真的很陌生,我确实研究了它们一些,并且我了解它们是如何工作的,但我真的不知道语法。

或者...由于在初始化表单时填充了文本框,有没有办法可以以不同的方式触发我需要的代码?

此外,我知道我可能不会在这里使用最佳实践方法,稍后会介绍。我需要尝试使其正常工作,并且除了这一个事件之外,我的表单的其余部分都可以正常工作。请不要因为我没有使用正确的方法而责备我,相反,请帮助我解决手头的问题。

系统信息:

  • Windows 8.1
  • .NET Framework 4.5
  • Visual Studio 2013 旗舰版
  • 适用于 Visual Studio 的 MySQL 5.6

完整表单代码(减去 MySQL 连接字符串:)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace _2014BillOfMaterials
{
    public partial class BillofMaterialsRevisions : Form
    {
        public BillofMaterialsRevisions(string s)
        {
            if (s != "- Select a Job -")
            {
                string server = "192.168.1.149";
                string database = "####";
                string userid = "iuapp";
                string password = "iuapp";
                string str;
                str = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + userid + ";" + "PASSWORD=" + password + ";";

                MySqlConnection con = null;

                con = new MySqlConnection(str);

                MySqlConnection myconn = new MySqlConnection(str);
                MySqlDataAdapter jobNumber = new MySqlDataAdapter("SELECT * FROM jobnumbers where jobNumber = '" + s + "'", myconn);

                DataTable dtJobNumber = new DataTable("jobnumbers");
                DataSet dtJobNumber2 = new DataSet();
                jobNumber.Fill(dtJobNumber);

                InitializeComponent();
                this.WindowState = FormWindowState.Maximized;

                MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM jobnumbers where jobNumber = '" + s + "'", myconn);
                adapter.Fill(dtJobNumber2);
                textBox2.Text = dtJobNumber2.Tables[0].Rows[0][6].ToString();
                textBox1.Text = dtJobNumber2.Tables[0].Rows[0][8].ToString();
                textBox3.Text = dtJobNumber2.Tables[0].Rows[0][10].ToString();
                textBox4.Text = dtJobNumber2.Tables[0].Rows[0][0].ToString();

                txtdateTimePicker1.Text = dtJobNumber2.Tables[0].Rows[0][5].ToString();
                txtdateTimePicker2.Text = dtJobNumber2.Tables[0].Rows[0][7].ToString();
                txtdateTimePicker3.Text = dtJobNumber2.Tables[0].Rows[0][9].ToString();


                lblJobNumber.Text = s + " Revisions";
                label10.Text = s;
            }
            else
            {
                //Show Error MessageBox
                MessageBox.Show("Please Select a Job.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }

        }

        private void BillofMaterialsRevisions_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {                        
            string server = "192.168.1.149";
            string database = "####";
            string userid = "iuapp";
            string password = "iuapp";
            string str;
            str = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + userid + ";" + "PASSWORD=" + password + ";";

            MySqlConnection myconn2 = new MySqlConnection(str);
            MySqlConnection con = null;

            con = new MySqlConnection(str);
            con.Open();

            string date1 = dateTimePicker1.Value.ToString("yyyy-MM-dd");
            string date2 = dateTimePicker2.Value.ToString("yyyy-MM-dd");
            string date3 = dateTimePicker3.Value.ToString("yyyy-MM-dd");

            var cmd = new MySqlCommand("Insert into jobnumbers(id, jobNumber, IssuedDate, IssuedInitials, RevADate, RevAInitials, RevBDate, RevBInitials) SELECT DISTINCT '" +
                textBox4.Text + "', '" + 
                label10.Text + "', '" +
                date1 + "', '" +
                textBox2.Text + "', '" +
                date2 + "', '" +
                textBox1.Text + "', '" +
                date3 + "', '" +
                textBox3.Text +
                "' " +
                "ON DUPLICATE KEY UPDATE id =  '" + textBox4.Text + "' " +
                ", jobNumber = '" + label10.Text + "' " +
                ", IssuedDate = '" + date1 + "' " +
                ", IssuedInitials = '" + textBox2.Text + "' " +
                ", RevADate = '" + date2 + "' " +
                ", RevAInitials = '" + textBox1.Text + "' " +
                ", RevBDate = '" + date3 + "' " +
                ", RevBInitials = '" + textBox3.Text + "'", con);

            cmd.ExecuteNonQuery();
        }

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            if (txtdateTimePicker1.Text == "1/1/2000 12:00:00 AM")
            {
                dateTimePicker1.Format = DateTimePickerFormat.Short;
                dateTimePicker1.Text = txtdateTimePicker1.Text;
            }
            else
            {
                dateTimePicker1.Format = DateTimePickerFormat.Custom;
                dateTimePicker1.CustomFormat = " ";
                dateTimePicker1.Text = "";
            }
        }

        private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
        {
            if (txtdateTimePicker2.Text != "" || txtdateTimePicker2.Text != "1/1/2000 12:00:00 AM")
            {
                dateTimePicker2.Format = DateTimePickerFormat.Short;
                dateTimePicker2.Text = txtdateTimePicker2.Text;
            }
            else
            {
                dateTimePicker2.Format = DateTimePickerFormat.Custom;
                dateTimePicker2.CustomFormat = " ";
                dateTimePicker2.Text = "";
            }
        }

        private void dateTimePicker3_ValueChanged(object sender, EventArgs e)
        {
            if (txtdateTimePicker3.Text != "" || txtdateTimePicker3.Text != "1/1/2000 12:00:00 AM")
            {
                dateTimePicker3.Format = DateTimePickerFormat.Short;
                dateTimePicker3.Text = txtdateTimePicker3.Text;
            }
            else
            {
                dateTimePicker3.Format = DateTimePickerFormat.Custom;
                dateTimePicker3.CustomFormat = " ";
                dateTimePicker3.Text = "";
            }
        }
    }
}

最佳答案

不允许将 ""(空) 设置为 Text 属性,因为 Text 属性应该是有效日期时间对象。看看它的documentation .

解决此问题的一种方法是禁用 DateTimePicker 控件并在需要时重新启用它。

用途:

dateTimePicker1.Enabled = True;  // enables it
dateTimePicker1.Enabled = False; // disable it 

希望对你有帮助!

关于c# - 如果 TextBox 为特定值,则将 dateTimePicker 设置为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22482162/

相关文章:

MySQL - 组合多个查询

python - 通过 AJAX 将 Django 表单作为 JSON 发送

jquery - .submit() 是否丢失了提交类型的输入名称

c# - 应用程序日志记录和信息分析

c# - 未使用 c# 在 Windows 中设置环境。我哪里错了?

c# - 在连接 LINQ 中使用多个条件。我,我和

php - PHP PDO事务复制

c# - 使用 Asp.net 连接 MySql 时出错

c# - 在 C# 中声明我的第二个方法时,出现错误 "Static local functions is not available in c# 7.3"

asp.net-mvc - 为什么要对逗号 URL 进行编码?