我的打印菜单中有一个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。为什么?!谢谢
答案 0 :(得分:3)
请阅读ComboBox.SelectedIndex
属性here:
此属性指示当前所选的从零开始索引 组合框列表中的项目。设置一个新索引会提高
SelectedIndexChanged
事件。SelectedIndex
,SelectedValue
和。{FormattingEnabled
的相关内容如下:
- 如果
FormattingEnabled
为false
,则当SelectedIndex
为<SelectedValue
时, 将设置为 强>空白即可。- 如果
FormattingEnabled
为true
,则当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开始。