0

イベントで関数をプログラムで呼び出そうとしています。

一般的に文字列をイベントに変換する方法は? 私の問題は、実際にこれを行う方法を知らないことですか?

strをイベントに変換するには?

str = "test1";

// UserControlsBackgroundEventArgs = EventArgs 
EventArgs arg = (EventArgs)str; --> ?
UserControlsBackgroundOutput(str); 



//function 
private string CLICKNAME = "test0";
private void UserControlsBackgroundOutput(EventArgs e)
{    
    if (CLICKNAME == e.output)
        return;

    if (e.output == "test1"){}
}

エラーが解決しました: 私はしなければなりませんでした

UserControlsBackgroundEventArgs arg = new UserControlsBackgroundEventArgs(CLICKNAME);

それ以外の

UserControlsBackgroundEventArgs arg = new (UserControlsBackgroundEventArgs)(CLICKNAME);
4

4 に答える 4

0

私はあなたのコードを模倣するコードを書きました。うまくいけば、それが役に立つでしょう:

public class UserControlsBackgroundEventArgs
{
  public string output;

  public UserControlsBackgroundEventArgs(string up)
  {
     output = up;
  }
}

public delegate void UserControlsBackgroundOutputHandle(UserControlsBackgroundEventArgs e);

public class testEvent
{
  public event UserControlsBackgroundOutputHandle UserControlsBackgroundOutput;

  public void DoSomeThings()
  {
     // do some things

     if (UserControlsBackgroundOutput != null)
     {
        string str = "test1";

        UserControlsBackgroundEventArgs arg = new UserControlsBackgroundEventArgs(str);
        UserControlsBackgroundOutput(arg); // you've done that with str, whitch makes me
                                          // you don't know what the event param is
     }
  }
}

public class test
{
  private testEvent myTest;
  private const string CLICKNAME = "whatever"; // i don't know what you want here

  public test()
  {
     myTest = new testEvent();
     myTest.UserControlsBackgroundOutput += UserControlsBackgroundOutput;
  }

  void UserControlsBackgroundOutput(UserControlsBackgroundEventArgs e)
  {
     if (CLICKNAME == e.output)
        return;

     if (e.output == "test1")
     {
     }
  }
}
于 2013-07-16T10:35:50.357 に答える
0

実装UserControlsBackgroundEventArgsは、暗黙的/明示的なキャストを提供できます。

暗黙のキーワードのドキュメントを見てください

ただし、Wojciech Budniak からの回答の方が優れています。

于 2013-07-16T10:33:06.133 に答える
0

イベント クラスには、文字列を受け入れるコンストラクターが必要です。次に、文字列を使用して新しいイベント インスタンスを作成できます。文字列をイベント クラスのインスタンスに "変換" することはできません。イベント クラスがライブラリまたは sth から取得され、文字列コンストラクターがない場合は、それをサブクラス化し、文字列コンストラクターを実装して、出力プロパティをオーバーライドできます。

于 2013-07-16T10:20:10.587 に答える
0

この種の変換を可能にしたい場合は、次を使用する必要がありますexplicit operator

public static explicit operator UserControlsBackgroundEventArgs(string s)
{
    var args = new UserControlsBackgroundEventArgs();
    args.output = s;
    return args;
}

EventArgsそのクラスのコードを変更することはできないため、これは ではなく、新しいクラスでのみ可能です。

于 2013-07-16T10:34:40.833 に答える