为了账号安全,请及时绑定邮箱和手机立即绑定

字符串变量赋值不起作用 C#

字符串变量赋值不起作用 C#

C#
慕姐4208626 2021-11-28 19:40:11
我正在调用一个模式表单( ss),它显示给定搜索条件的所有股票代码。用户选择一个项目private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {    selectedStockDescription = dgv_StckSrchRes.Rows[e.RowIndex].Cells[1].Value.ToString();    selectedStockCode = dgv_StckSrchRes.Rows[e.RowIndex].Cells[0].Value.ToString();    DialogResult result = MessageBox.Show(        (selectedStockDescription),         "Add this item to the order?",          MessageBoxButtons.YesNoCancel,          MessageBoxIcon.Question);    if (result == DialogResult.Yes)     {        stockCode = selectedStockCode;        stockDescription = selectedStockDescription;        this.Close();                             }    else if (result == DialogResult.No)     {         this.Focus();    }    else if (result == DialogResult.Cancel)     {        this.Close();     } }并以模态形式设置以下两个公共字符串:public string stockCode { get; set; }public string stockDescription { get; set; }在我的父表单中,我将这些值分配给在类级别初始化的两个变量。using (StockSearch ss = new StockSearch(selectedDept, txb_StockCode.Text)){    if (ss.ShowDialog() != DialogResult.Cancel)        stckCd = ss.stockCode;    stockDescription = ss.stockDescription;    SetFormProperties();    PopulateStockInformation();    GetLeadTimes();   }然而,只有stockDescription变量是设置。该stckCd保持null-即使在右边的值ss.stockCode-填充。它只是没有分配值stckCd,我需要它才能在我的应用程序的其他地方访问这个值。我试过用一个值初始化它们,但它没有修复它。任何人都可以请教我吗?
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

问题出在StockSearch(模态形式)方面:关闭时StockSearch您应该设置DialogResult:这里有两种可能的关闭方式 -取消(默认行为)和OK。


  private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {

    selectedStockDescription = dgv_StckSrchRes.Rows[e.RowIndex].Cells[1].Value.ToString();

    selectedStockCode = dgv_StckSrchRes.Rows[e.RowIndex].Cells[0].Value.ToString();


    DialogResult result = MessageBox.Show(

      (selectedStockDescription), 

      "Add this item to the order?", 

       MessageBoxButtons.YesNoCancel, 

       MessageBoxIcon.Question);


    if (result == DialogResult.Yes) {

      // Confirmed: close the form WITH the choice made (DialogResult.OK)

      stockCode = selectedStockCode;

      stockDescription = selectedStockDescription;


      // this.Close();                     // <- cause of the misbehaviour           

      this.DialogResult = DialogResult.OK; // <- not Close (with cancel) but with OK

    }

    else if (result == DialogResult.No)  

      // Not confirmed: keep on selecting 

      this.Focus();

    else // no need in "if": all the rest is Cancel 

      // Cancellation: close the form WITHOUT choice (DialogResult.Cancel)

      this.Close(); // <- Close with DialogResult.Cancel

  }

在父窗体端


   using (StockSearch ss = new StockSearch(selectedDept, txb_StockCode.Text)) {

     if (ss.ShowDialog() != DialogResult.Cancel) {

       stckCd = ss.stockCode;

       // You should not change stockDescription on DialogResult.Cancel  

       stockDescription = ss.stockDescription;  

     } 


     //TODO: it seems that these three calls should be within if as well

     SetFormProperties();

     PopulateStockInformation();

     GetLeadTimes();   

   }


查看完整回答
反对 回复 2021-11-28
  • 1 回答
  • 0 关注
  • 366 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信