我有一个Visual Studio项目,使用supportedRuntime version=“v4.0”和.NETFramework,Version=v4.5.2 with Microsoft Forms。我使用默认的json设置文件来在应用程序启动时加载初始设置。我能够将TextBox和NumericUpDown字段添加到表单中,以读取和更新json文件中的值。
但是,我还没有找到更新TimeSpan值的方法。我尝试使用TextBox和NumericUpDown,这将读取TimeSpan值并在表单字段中显示时间。但是,我无法使用表单字段更新TimeSpan值。我还尝试在我的表单中使用DateTimePicker字段(仅格式化为24小时时间),这也将显示TimeSpan值,但我再次无法使用datetime表单字段编辑该值。例如,将时间从03:00:00更改为04:00:00后,一旦退出字段,该值将恢复为默认值。我在使用TextBox和DateTimePicker时也有同样的行为。
我已经包括了与TimeSpan值相关的应用程序的不同代码片段。此值设置运行SQL备份的时间。
this.TxtPickBackupStartTime.DataBindings.Add(
nameof(this.TxtPickBackupStartTime.Text), applicationSettings,
nameof(applicationSettings.StartBackupAt), false,
DataSourceUpdateMode.OnValidation)
this.TxtPickBackupStartTime = new System.Windows.Forms.TextBox();
this.Controls.Add(this.TxtPickBackupStartTime);
private System.Windows.Forms.TextBox TxtPickBackupStartTime;
public TimeSpan StartBackupAt;
StartBackupAt = new TimeSpan(3, 0, 0),
settings.json file:
"StartBackupAt": "03:00:00",
我目前得到以下错误后,实施奥利弗的建议,下面当替换timeModelBindingSource与applicationSettings.StartBackupAt。
任何帮助将不胜感激。
乔伊
下面是两个部分的代码,我希望能提供更多的信息。
namespace TendBackupApplication.Forms
{
public partial class SettingsDialog : Form
{
private readonly ApplicationSettings applicationSettings;
public SettingsDialog(ApplicationSettings applicationSettings)
{
this.InitializeComponent();
this.applicationSettings = applicationSettings;
this.txtTime.DataBindings.Add(new Binding("Text", this.applicationSettings.StartBackupAt, "Time", true, DataSourceUpdateMode.OnValidation, "T"));
.
namespace TendBackupLibrary.Settings
{
public delegate void ApplicationSettingsSavedEvent(object sender, EventArgs e);
public class ApplicationSettings
{
private readonly SettingsReader settingsReader;
private readonly SettingsFile defaultSettings;
private SettingsFile previousSettings;
private SettingsFile currentSettings;
public ApplicationSettings(SettingsReader settingsReader)
{
this.settingsReader = settingsReader;
this.defaultSettings = new SettingsFile
{
DatabaseName = "Tend",
StartBackupAt = new TimeSpan(03, 00, 00),
BackupInterval = 10
MaxDatabaseCopies = 1,
MonitorInterval = 3, // seconds
MaxMonitorFailures = 3,
Enabled = true,
下面是TimeSpan函数
public TimeSpan StartBackupAt
{
get
{
return this.currentSettings.StartBackupAt;
}
set
{
this.currentSettings.StartBackupAt = value;
}
}
settings.json文件
"DatabaseName": "Tend",
"StartBackupAt": "03:00:00",
"BackupInterval": 10,
"OverwriteDatabase": true,
"MaxDatabaseCopies": 1,
"MonitorInterval": 3,
"MaxMonitorFailures": 3,
"Enabled": true,
1条答案
按热度按时间aemubtdh1#
它通过将
TextBox.Text
属性绑定到模型类的DateTime
属性来工作。只需确保指定T
日期/时间格式以抑制日期部分的显示。范例:
更新
现在我看到了你的相关部分代码,我可以更精确的回答了。
将此属性添加到类中
编译您的应用程序,使此新属性对绑定机制可见。
根据WinForms – Bind controls to an object data source中所述的
ApplicationSettings
类添加BindingSource
组件和数据源。删除文本框中的所有绑定。添加一个新的绑定到您的文本框中解释的链接。也就是说,选择你的TextBox,在属性窗口中选择
(DataBindings)
/(Advanced)
,然后从BindingSource下拉列表中选择你的BindingSource组件和StartBackupAtDateTime
(而不是链接中的Name
)。这会在form.designer.cs文件中自动执行DataBindings.Add
操作。剩下要做的就是将设置分配给BindingSource:
请注意,您必须指定整个设置对象,而不是
applicationSettings.StartBackupAtDateTime
。就这样