首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我会得到奇怪的ComboBox行为?

为什么我会得到奇怪的ComboBox行为?
EN

Stack Overflow用户
提问于 2015-04-18 14:35:13
回答 2查看 152关注 0票数 0

我的print菜单中有一个comboBox,允许用户设置print DPI。为了让comboBox返回正确的值,我必须从-1开始计算SelectedIndex计数,而不是从0开始。为什么会发生这种情况?我尝试了这里的一些建议,包括设置默认的SelectedIndex值,但这并没有解决问题。

代码语言:javascript
运行
复制
    private void toolStripComboBoxPrint_Click(object sender, EventArgs e)
    {
        if (toolStripComboBoxPrint.SelectedIndex == -1) dpi = 96;
        if (toolStripComboBoxPrint.SelectedIndex == 0) dpi = 200;
        if (toolStripComboBoxPrint.SelectedIndex == 1) dpi = 300;
        if (toolStripComboBoxPrint.SelectedIndex == 2) dpi = 600;
        label1.Text = Convert.ToString(dpi);
    }

    private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (pictureBoxMain.Image != null)
        {
            label2.Text = Convert.ToString(dpi);
            Bitmap myBitmap = (Bitmap)pictureBoxMain.Image;
            myBitmap.SetResolution(dpi, dpi);
            printDocument1.DocumentName = myBitmap.ToString();
            printDialog1.Document = printDocument1;
            printPreviewDialog1.Document = printDialog1.Document;
            printPreviewDialog1.ShowDialog();
        }
    }

当我从-1开始计数时,Label1和Label2只返回正确的值。为什么?!谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-04-18 16:13:24

请阅读有关ComboBox.SelectedIndex属性here的信息

此属性指示组合框列表中当前选定项的从零开始的索引。设置新索引将引发SelectedIndexChanged事件。SelectedIndexSelectedValueFormattingEnabled的关系如下:

如果FormattingEnabledfalse,则当SelectedValue空白时,SelectedIndex 不会被设置为-1\f25-1。-1\f25

  • -1\f6如果FormattingEnabled为-1\f25 true -1\f6,当-1\f25 SelectedValue -1\f6为-1\f25 blank.

-1\f6时,-1\f25 SelectedIndex -1\f6将被设置为-1\f25-1\f6

因此,如果您的问题是为什么我的SelectedIndex值是-1

这是因为SelectedValue是“空的”,而您将FormattingEnabled设置为true

但是,您的问题似乎是由于您绑定到了错误的事件,即OnClick事件,而不是SelectedIndexChanged事件。

发生的情况是,在组合框的SelectedIndex属性更改之前,您的SelectedIndex事件处理程序被称为。因此,您看到的是它的旧值。

要解决此问题,请删除toolStripComboBoxPrint_Click事件处理程序,并将其替换为

代码语言:javascript
运行
复制
private void toolStripComboBoxPrint_SelectedIndexChanged(
    object sender, 
    System.EventArgs e)
{
    var selectedIndex = toolStripComboBoxPrint.SelectedIndex;
    if (selectedIndex >= 0)
    {
        if (selectedIndex == 0) dpi = 96;
        if (selectedIndex == 1) dpi = 200;
        if (selectedIndex == 2) dpi = 300;
        if (selectedIndex == 3) dpi = 600;
        label1.Text = Convert.ToString(dpi);
    }
    else // no dpi selected, what to do?
    {
        // You will need to figure out what you want to do here.
        label1.Text = ""; // Empty?
    }
}

并将此事件处理程序绑定到您的combobox实例,当您的窗体构造如下:

代码语言:javascript
运行
复制
this.toolStripComboBoxPrint.SelectedIndexChanged += 
        new System.EventHandler(toolStripComboBoxPrint_SelectedIndexChanged);    
票数 3
EN

Stack Overflow用户

发布于 2015-04-18 14:38:35

您可以从它们的值中获取combobox。所选索引从0开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29713839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档