StackOverflowのために新しいですと異なって尋ねた(だけでなく、返却する必要性を除去しなければならない場合には謝罪私のクラスfooでINotifyPropertyChangedを実装し、何かが変更されたことをユーザーに知らせる必要があるときはいつでもWindowsフォームでPropertyChangedイベントを発生させることによって、
クラスの
foo-
public class foo : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public int bar;
private void NotifyPropertyChanged(string type) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(type));
}
}
private void test(){
bar = 1;
NotifyPropertyChanged("changed int");
}
}
Windowsフォームで
:
public partial class GUI : Form {
foo fooinstance = new foo();
public GUI(){
InitializeComponent();
fooinstance.PropertyChanged += doEvent;
}
private void doEvent(object sender, PropertyChangedEventArgs e){
foo updated = sender as foo;
if (object.ReferenceEquals(e.PropertyName, "changed int")) {
ShowWhatChanged(updated.bar); //show on GUI
}
}
}
EDIT: 私が使用して終了し、より優雅できれいな方法は、コールバックを利用することでした。 GUIはインスタンス化時に関数ポインタをfooに渡し、fooはそれをデリゲートとして使用して、必要に応じて文字列をGUIに戻しました。いいえイベントは必要ありません:
は
public class foo {
public delegate void UpdateCallback(string msg);
private UpdateCallback _ucb;
public foo(UpdateCallback cb){
_ucb = cb;
}
private void test(){
if(_ucb != null) {
_ucb("Message Here");
}
}
}
public partial class GUI : Form {
public GUI(){
InitializeComponent();
foo fooinstance = new foo(showmessage);
}
private void showmessage(string msg){
//do whatever with the message
}
}
あなたは[INotifyDataErrorInfo]に興味があるかもしれません(https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo(V = vs.110).aspxの) –
@ScottChamberlain私を許して、私はC#の新機能です。これは、何らかの形でWindowsフォームに捕まえることができるイベントを発生させる方法になりますか? – Cobalt
はい、インタフェースを実装して、それを使ってどのプロパティにエラーがあるかに関する情報を提供することができます。それを実装する方法を学ぶためのGoogleチュートリアルは、WinFormsとWPFの両方に統合されています –