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

时间:2015-04-18 06:35:13

标签: c# combobox dpi

我的打印菜单中有一个comboBox,允许用户设置打印DPI。而不是将SelectedIndex计数设置为0,我不得不启动它 -1为comboBox返回正确的值。为什么会这样?我从这里尝试了一些建议,包括设置默认的SelectedIndex值,但是没有解决问题。

    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();
        }
    }

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

2 个答案:

答案 0 :(得分:3)

请阅读ComboBox.SelectedIndex属性here

  

此属性指示当前所选的从零开始索引   组合框列表中的项目。设置一个新索引会提高   SelectedIndexChanged事件。 SelectedIndexSelectedValue和。{   FormattingEnabled的相关内容如下:

     
      
  • 如果FormattingEnabledfalse,则当SelectedIndex为<SelectedValue时, 设置为 强>空白即可。
  •   
  • 如果FormattingEnabledtrue,则当SelectedIndex 空白时,SelectedValue将设置为 -1
  •   

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

这是因为SelectedValue为“空白”且您将FormattingEnabled设置为true

但是看起来你的问题是由于你绑定到不正确的事件,即OnClick事件,而不是SelectedIndexChanged事件。

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

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

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?
    }
}

当您的表单构造如下时,将此事件处理程序绑定到您的组合框实例:

this.toolStripComboBoxPrint.SelectedIndexChanged += 
        new System.EventHandler(toolStripComboBoxPrint_SelectedIndexChanged);    

答案 1 :(得分:0)

你可以从他们的价值中获得组合框。选定的索引从0开始。