2014-01-10 3 views
1

폼에 컨트롤을 채우는 데 사용되는 매개 변수를 생성자가 사용하는 폼 클래스가 있습니다. 그들은 체크 박스, 몇 개의 콤보 상자, 날짜 시간 선택기 및 몇 개의 텍스트 상자로 구성됩니다. 폼이 렌더링 될 때 텍스트 상자가 비어있게 나타납니다. 코드를 단계별로 실행하면 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; 
     } 

    } 

각 그리기 방법은 양식에 컨트롤을 추가합니다.

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 속성을 설정 한 다음 그룹 상자에 추가하는 것입니다. 디버거에서 클래스를 검사하면 모든 것이 잘 나타나지만 표시가 으로 표시되면 텍스트 필드가 지워지고 조사 식 창에 빨간색으로 표시됩니다. 다른 모든 컨트롤은 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); 
    } 
} 

나는 ... 검증은 그것을 허용하지 않기 때문에 빈 결코 데이터베이스에서 검색 값,하지만 아무것도

+6

코드를 공유 할 수 있습니까? – Ramashankar

+0

'txtboxId.Text'를 사용하여 텍스트 상자의 텍스트를 설정 하시겠습니까? –

+0

Form_Load에서 텍스트 상자가 지워지지 않았는지 확인하십시오 (양식을 보여주는 wen이라고 부름)? – Akrem

답변

0

턴을 이러한 컨트롤의 텍스트 필드를 설정하고 콤보 상자의 다른 컨트롤이 논리 결함으로 인해 예외를 던지고 있지만 여전히 올바른 값을 표시하고 있음을 알 수 있습니다. 도와 주셔서 감사합니다.

관련 문제