C# 数据绑定can';按IBindableComponent设置的t CONVERT
我使用的是VS2017 IDE、DotNet4.5.2和WinForm框架 我想用进度条显示一个值,所以我编写了以下代码,它可以正常工作:C# 数据绑定can';按IBindableComponent设置的t CONVERT,c#,.net,winforms,C#,.net,Winforms,我使用的是VS2017 IDE、DotNet4.5.2和WinForm框架 我想用进度条显示一个值,所以我编写了以下代码,它可以正常工作: progressBar1.DataBindings.Add(nameof(ProgressBar.Maximum), source, nameof(source.Maximum)); progressBar1.DataBindings.Add(nameof(ProgressBar.Minimum), source, nameof(source.Minimum
progressBar1.DataBindings.Add(nameof(ProgressBar.Maximum), source, nameof(source.Maximum));
progressBar1.DataBindings.Add(nameof(ProgressBar.Minimum), source, nameof(source.Minimum));
progressBar1.DataBindings.Add(nameof(ProgressBar.Value), source, nameof(source.Status)).Format += (sender,e) => {
e.Value = (int)(e.Value as IStatus).Value;
};
我想使用ToolStripProgressBar来显示它,但由于它无法执行数据绑定,我定义了一个新类来继承它并实现IBindableComponent,如下所示:
public class BindableToolStripProgressBar : ToolStripProgressBar, IBindableComponent
{
private BindingContext bindingContext;
private ControlBindingsCollection dataBindings;
public BindingContext BindingContext
{
get
{
if (bindingContext == null)
{
bindingContext = new BindingContext();
}
return bindingContext;
}
set
{
bindingContext = value;
}
}
public ControlBindingsCollection DataBindings
{
get
{
if (dataBindings == null)
{
dataBindings = new ControlBindingsCollection(this);
}
return dataBindings;
}
}
}
然后,我将数据绑定对象从ProgressBar更改为新定义的BindableToolStripProgressBar,但这次运行应用程序导致抛出System.FormatException:
tspb.DataBindings.Add(nameof(ProgressBar.Maximum), source, nameof(source.Maximum));
tspb.DataBindings.Add(nameof(ProgressBar.Minimum), source, nameof(source.Minimum));
tspb.DataBindings.Add(nameof(ProgressBar.Value), source, nameof(source.Status)).Format += (sender, e) => {
e.Value = (int)(e.Value as IStatus).Value; // Will be thrown FormatException
};
我的IBindableComponent实现有什么问题吗?
谢谢你
ToolStripProgressBar
具有一个属性,该属性公开托管在ToolStripControlHost
中的ProgressBar
控件<代码>ToolStripProgressBar的最大值、最小值
和值
属性基本上获取或设置底层ProgressBar
的相应属性
因此,您可以设置数据绑定到底层的ProgressBar
:
Source source = new Source() { Minimum = 0, Maximum = 100, Value = 50 };
private void Form1_Load(object sender, EventArgs e)
{
var p = toolStripProgressBar1.ProgressBar;
p.DataBindings.Add(nameof(p.Maximum), source, nameof(source.Maximum));
p.DataBindings.Add(nameof(p.Minimum), source, nameof(source.Minimum));
p.DataBindings.Add(nameof(p.Value), source, nameof(source.Value));
}
第一个问题写得很好。做得好!尝试在事件处理程序中使用
int.Parse((e.Value作为IStatus).Value.ToString(),NumberStyles.Any)
。即使e.Value=0,仍然不起作用。问题似乎不在这里。您不需要创建新的ToolStripProgressBar
。使用其底层的ProgressBar
进行数据绑定。