繁体   English   中英

不能在计时器间隔使用整数

[英]can't use integer at timer interval

我正在使用WPF,并且计时器不允许将int用于间隔。 而是要求TimeSpan

timer1.Interval = TimeSpan.FromMilliseconds(Convert.ToDouble(comboBox1.SelectedItem));

因此,我将代码更改为此,但是在运行时,它给了我InvalidCastException,表示无法将对象从System.Windows.Controls.ComboboxItem转换为System.IConvertible。

我该如何解决?

你应该用这个

Convert.ToDouble(comboBox1.SelectedText)

comboBox1.SelectedItem对应于ComboBox控件的选定项目,而不是您想要的文本。

特别是,CombBox控件的SelectedText属性

获取或设置在ComboBox的可编辑部分中选择的文本。

因为它是说在这里

更新资料

请使用这个:

((ComboBoxItem)comboBox1.SelectedItem).Content.ToString();

或分两步:

ComboBoxItem item = (ComboBoxItem)comboBox1.SelectedItem;
timer1.Interval = TimeSpan.FromMilliseconds(Convert.ToDouble(item.Content.ToString()));

有关ComboBoxItem类的更多信息,请在此处查看

看来您是将ComboBoxItems直接添加到ComboBox中。

比解析字符串更干净,更安全的方法是继续绑定到SelectedItem,但也将ItemsSource绑定到整数集合。

然后,如果对默认的ToString()渲染不满意,请使用ComboBox的ItemTemplate属性定义如何渲染整数。

<ComboBox ItemsSource="{Binding Intervals}" SelectedItem="{SelectedInterval}">
    <ComboBox.ItemTemplate>
        <DataTemplate TargetType="{x:Type Int64}">
            <TextBlock Text="{Binding}" Background="Red"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
<ComboBox>

具有如下所示的属性:

public int SelectedInterval {get;set;}

public List<int> Intervals {
    get {
        var lst = new List<int>();
        for(var i = 1000; i <= 10000; i += 500)
        {
            lst.Add(i);
        }
        return lst;
    }
}

现在,您具有无需解析即可操作的强类型属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM