1

stringを使用してfromform SettingsMenuをメインフォームに送信しようとしていますDelegate。構造は次のとおりです。

SettingsMenuフォームで委任します。

delegate void ClocknameReceivedEventHandler(object sender, SettingsMenu.ClocknameReceivedEventArgs e);

SettingsMenuクラス内の内部クラスClocknameReceivedEventArgs:

public partial class SettingsMenu : Form
{
    internal class ClocknameReceivedEventArgs : EventArgs
    {
        string _clockname;
        public string Clockname
        {
            get { return _clockname; }
        }

        public ClocknameReceivedEventArgs(string clockname)
        {
            _clockname = clockname;
        }
    }
}

そして、コードのもう少し下にSettingsMenu

public event ClocknameReceivedEventHandler ClocknameReceived;

// Invoke the Changed event; called whenever list changes
protected void OnClocknameReceived(SettingsMenu.ClocknameReceivedEventArgs e)
{
    ClocknameReceived(this, e);
}

私は以下を使用してSettingsMenuから入ってくるデータをキャッチします:Main formEvent

_settings.ClocknameReceived += new ClocknameReceivedEventHandler(ClockClocknameReceived);

SettingsMenuから実際に文字列を受け取ったメインフォームのメソッド:

private void ClockClocknameReceived(object sender, SettingsMenu.ClocknameReceivedEventArgs e)
{
    string ClockName;
    ClockName = e.Clockname;
    lblClockname.Text = ClockName;
}

これで、SettingsMenuクラスで次のエラーが発生します。

Error   2   Inconsistent accessibility: parameter type 'LivePigeonClient.Forms.SettingsMenu.ClocknameReceivedEventArgs' is less accessible than method 'LivePigeonClient.Forms.SettingsMenu.OnClocknameReceived(LivePigeonClient.Forms.SettingsMenu.ClocknameReceivedEventArgs)'    D:\SVN\sentul\Livepigeonflights\trunk\LivePigeonClientSolution\LivePigeonClient\Forms\SettingsMenu.cs   54  24  LivePigeonClient

Error   1   Inconsistent accessibility: field type 'LivePigeonClient.Forms.ClocknameReceivedEventHandler' is less accessible than field 'LivePigeonClient.Forms.SettingsMenu.ClocknameReceived' D:\SVN\sentul\Livepigeonflights\trunk\LivePigeonClientSolution\LivePigeonClient\Forms\SettingsMenu.cs   51  52  LivePigeonClient

誰かが私が間違ったことを教えてもらえますか?

4

4 に答える 4

13

問題を解決するには、public delegateとを使用する必要がありました。public class

于 2013-03-15T11:28:00.197 に答える
2

イベント引数は内部としてマークされています。これは、アセンブリの外部で共有されていないことを意味します。

internal class ClocknameReceivedEventArgs

ただし、保護されたものとして作成されたメソッド(アセンブリの外部で使用可能)で使用します。

protected void OnClocknameReceived(SettingsMenu.ClocknameReceivedEventArgs e)

コンパイラがこれを許可した場合、パラメータを作成できない場合、誰かがあなたのメソッドをどのように呼び出すことになっているでしょうか?

修正するには、これをどのように使用するかに応じて、両方をパブリックまたは両方を保護するか、両方を内部に変更します。

于 2013-03-15T08:42:10.480 に答える
0

ええ、アクセス修飾子をパブリックに切り替えるだけで大​​丈夫です...

于 2013-03-15T08:36:19.190 に答える
0

デリゲートへのパブリックアクセス指定子を使用している場合は、それを削除します。それは私にとって素晴らしい働きをしました。

于 2014-01-07T12:48:49.680 に答える