无法从组合框中检索数据。

Posted

技术标签:

【中文标题】无法从组合框中检索数据。【英文标题】:Unable to retrieve data from combobox. 【发布时间】:2011-09-15 10:11:41 【问题描述】:

我正在尝试显示 if 语句的结果,该语句基于在 windows 窗体组合框中选择的选项。 当 if 语句放置在其自己的类中与表单分开并且总是只返回 else 值时,我遇到了问题。我已经公开了组合框。 我的代码如下。

public void button1_Click(object sender, EventArgs e)

    xRayData xRayData1 = new xRayData();
    string shiftChangeValue;
    shiftChangeValue = xRayData1.shiftChange();
    label2.Text = shiftChangeValue;


public string shiftChange()

    frmSWChange frmSWChange1 = new frmSWChange();

    string shiftLetter;

    if (frmSWChange1.cbShift.Text == "Day")
    
        shiftLetter = "D";
    
    else if (frmSWChange1.cbShift.Text == "Night")
    
        shiftLetter = "N";
    
    else if (frmSWChange1.cbShift.Text == "Morning")
    
        shiftLetter = "M";
    
    else
    
        shiftLetter = "ERROR";
    


    return shiftLetter;

【问题讨论】:

【参考方案1】:

使用Selected... 获取组合框中的选定项

frmSWChange1.cbShift.SelectedItem // gets the binded item
frmSWChange1.cbShift.SelectedText // gets the display text of the selected item
frmSWChange1.cbShift.SelectedValue // gets the value of the selected item

【讨论】:

嘿,感谢您的评论,但是一旦我将值更改为 .SelectedText 我仍然总是返回错误值 您能调试一下看看SelectedText 中存储的内容吗?也许你的字符串不一样。 您实际上在哪里执行“frmSWChange1”表单的 ShowDialog()?在 frmSWChange 的构造函数中?以包含具有所选值的公共属性的方式设计“frmSWChange”表单会很好。这将有助于调试、重用表单和解耦 --> 让您的生活更轻松。 我在那里尝试了一些调试,结果发现没有值被传递到第二类。我尝试将组合框中选择的值分配给公共静态字符串,但是我遇到了同样的问题,即只显示错误。 你的静态字符串中存储了什么?【参考方案2】:

看看你方法中的这一行

frmSWChange frmSWChange1 = new frmSWChange();

您正在创建表单的一个新实例,这个实例与您所做的选择无关,这不会在组合框中选择任何文本。您需要的是对正在进行这些选择的表单的当前实例的引用。

【讨论】:

【参考方案3】:

frmSWChange.cs

namespace X_Ray

public partial class frmSWChange : Form


    public frmSWChange()
    
        InitializeComponent();
       frmSWChange1
    

    private void btnReturnToMainMenu_Click(object sender, EventArgs e)
    
        new frmMainMenu().Show();
        this.Close();
    

    public void button1_Click(object sender, EventArgs e)
    

        string shiftChangeValue;
        label1.Text = mtxtScrapDate.Text;
        derpderp1 = cbShift.SelectedText;
        xRayData xRayData1 = new xRayData();

        shiftChangeValue = xRayData1.shiftChange();
        label2.Text = shiftChangeValue;
    



xRayData.cs

namespace X_Ray

class xRayData

    #region Methods


    public string shiftChange()
    
        frmSWChange frmSWChange1 = new frmSWChange();

        string shiftLetter;

        if (frmSWChange1.cbShift.SelectedText == "Day")
        
            shiftLetter = "D";
        
        else if (frmSWChange1.cbShift.SelectedText == "Night")
        
            shiftLetter = "N";
        
        else if (frmSWChange1.cbShift.SelectedText == "Morning")
        
            shiftLetter = "M";
        
        else
        
            shiftLetter = "ERROR";
        


        return shiftLetter;
    

    #endregion


【讨论】:

您好,感谢您发布答案 :) 请注意,将空格缩进 all 行以确保代码形成一个块。但是,有时将其拆分是个好主意,但如果是这样,请进行一些解释。顶部应该总是有一些解释。如果您使用 lil' 解释对其进行编辑,它将获得一些支持;)

以上是关于无法从组合框中检索数据。的主要内容,如果未能解决你的问题,请参考以下文章

从组合框中的 DWORD_PTR 检索项目值?

无法在 ext.net 网格面板内的组合框中检索和设置值

将mysql数据作为数组检索并显示在多个组合框中

检索任意行以获取数据框中列的唯一组合

如何根据从其他框中选择的文本更改动态创建的组合框的显示项

从组合框中获取数据并使用它来获取另一个组合框中的数据