如this帖子所示,我需要与按钮进行交互,我的意思是,当用户按下OK按钮时保存存储库的值,是否有任何建议?
答案 0 :(得分:0)
我认为您可以使用对象发件人。发件人可能包含TimeSpanEditDropDownForm,你应该得到这个表单的实际值。 :) 我认为这个代码是从控制器调用的吗?
如果它是真的比你有View.CurrentObject,你必须知道哪个属性使用这个TimeSpanEditDropDownForm,所以你可以做这样的事情。
private void OkButton_Click(object sender, EventArgs e)
{
MyClass myClass = View.CUrrentObject as MyClass;
TimeSpanEditDropDownForm timeSpanForm = sender as TimeSpanEditDropDownForm;
myClass.CurrentTime = timeSpanForm.CurrentTime;
myClass.Session.CommitChanges();
MessageBox.Show("Ok");
}
我不知道在TimeSpanEditDropDownForm中存储TimeSpan的正确属性的名称是什么,你必须找到它,但我认为它可以帮助:)
答案 1 :(得分:0)
您需要在弹出窗体中找到TimeSpanEdit
控件。您可以遍历popupForm.Controls
集合以查找具有TimeSpanEdit
类型的控件。 Here是如何做到的例子。之后,您可以使用TimeSpanEdit.TimeSpan
属性获取TimeSpanEdit
控件的值。
private void OkButton_Click(object sender, EventArgs e)
{
var popupForm = (TimeSpanEditDropDownForm)OwnedForms.FirstOrDefault(item => item is TimeSpanEditDropDownForm);
if (popupForm == null)
return;
var timeSpanEdit = GetAll(this, typeof(TimeSpanEdit)).FirstOrDefault();
if (timeSpanEdit == null)
return;
MessageBox.Show(timeSpanEdit.TimeSpan.ToString());
}
public IEnumerable<Control> GetAll(Control control,Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll(ctrl,type))
.Concat(controls)
.Where(c => c.GetType() == type);
}