2015-09-05 43 views
0

如在this後所見,我需要與按鈕進行交互,我的意思是,當用戶按下確定按鈕時,保存存儲庫的值,有什麼建議?與RepositoryItemTimeSpanEdit的Ok/Accept或Cancel按鈕交互?

+0

我不明白,爲什麼你就是不上按下按鈕的使用事件EditValueChanged – HubertL

+0

你只是想這樣做,或當任何值發生變化,當用戶使用鍵盤怎麼樣? –

+0

我只需要使用按鈕就可以做到這一點。 – Thorin

回答

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); 
} 
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"); 
} 

我不知道什麼是正確的name屬性至極店時間跨度內TimeSpanEditDropDownForm這是你必須找出事情,但我認爲它可以幫助:)