文本框值在form.Show上清除

时间:2014-01-10 13:41:16

标签: c# winforms textbox

我有一个表单类,其构造函数接受一堆参数,用于填充表单上的控件。它们包含一个复选框,几个组合框,一个日期时间选择器和几个文本框。呈现表单时,文本框显示为空白。如果我单步执行代码,我会看到textbox.Text字段设置正确,但是当调用form.Show时,值将被清除。所有其他控件都保留传递给构造函数的值。

这些表单都是动态构建的。我不明白为什么会发生这种情况,构造函数和渲染之间没有其他代码运行。

public partial class Disposition : Form
{
    string _ncmID;
    int _baseNumber;
    string _type;
    string _by;
    string _partNo;
    DateTime _date;
    int _qty;
    bool _supplierCaused;
    string _notes;
    DateTime _dateReturned;
    frmMain _parentForm;
    GroupBox gbDisposition;
    CheckBox cbSupplierCaused;
    TextBox txtDispQuantity;        
    Label lblQuantity;
    DateTimePicker dtDate;
    Label lblDate;
    ComboBox cboBy;
    Label lblBy;
    TextBox txtNotes;
    Label lblNotes;
    DateTimePicker dtDateReturned;
    ComboBox cboPart; 

public Disposition(frmMain parent, string type, string by, DateTime date, int qty, bool supplierCaused, 
        string partNo, string notes, string ncmID, int baseNumber, DateTime dateReturned)
    {
        InitializeComponent();

        _parentForm = parent;            
        _type = type;
        _by = by;
        _qty = qty;
        _date = date;
        _supplierCaused = supplierCaused;
        _partNo = partNo;
        _notes = notes;
        _ncmID = ncmID;
        _baseNumber = baseNumber;
        _dateReturned = dateReturned;

        switch (_type)
        {
            case "Scrap":                    
                DrawScrap(true);
                break;
            case "Rework":
                DrawRework(true);
                break;
            case "Return to Vendor":
                DrawReturn(true);
                break;
            case "Use as Is":
                DrawUse(true);
                break;
            case "Void":
                DrawVoid(true);
                break;
            default:
                break;
        }

    }

每个Draw方法都会向表单添加控件,例如

 txtDispQuantity = new TextBox();
 txtDispQuantity.Location = new Point(248, 31);
 txtDispQuantity.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);
 txtDispQuantity.Size = new Size(55, 20);
 txtDispQuantity.Validating += new CancelEventHandler(txtDispQuantity_Validating);
 txtDispQuantity.Text = _qty.ToString();
 gbDisposition.Controls.Add(txtDispQuantity);

所以我只是设置文本框的Text属性,然后将其添加到组框中。如果我在调试器中检查类但是一旦调用了Show,一切看起来都很好 文本字段将被清除,并在监视窗口中显示为红色。所有其他控件都保留Draw方法中设置的值。

form_load中唯一发生的事情是组合框设置(在项目列表中添加字符串)。

private void txtDispQuantity_Validating(object sender, CancelEventArgs e)
{
    int q;

    if (!Int32.TryParse(txtDispQuantity.Text, out q))
    {
        MessageBox.Show("Please enter an integer value for the quantity", "NCM", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
}

在代码中没有任何地方我将这些控件的Text字段设置为除了从数据库中检索的值之外的任何值,因为验证不允许它从不为空...

1 个答案:

答案 0 :(得分:0)

原来,窗体上的另一个控件(组合框)由于逻辑缺陷而抛出异常,但仍显示正确的值。谢谢你的帮助。