1

Xamarin Studio を使用して Gtk# でコードを書いています。新しいウィンドウとその中に TreeView を作成すると、アクセス レベルは非公開になります。それ(TreeView)を他のクラスで使いたいのでアクセスレベルを内部に変更したいのですが、どうすればいいのかわかりません。事前に助けてくれてありがとう。GUIデザイナーが変更したいコードは次のとおりです(GUIデザイナーによって上書きされるため、コード内には記述しません...)

    // This file has been generated by the GUI designer. Do not modify.
namespace XX_xxxx
{
    public partial class Settings
    {
        private global::Gtk.VBox vbox1;

        private global::Gtk.ScrolledWindow GtkScrolledWindow;

        private global::Gtk.TreeView settingsTreeView;

        private global::Gtk.HBox hbox1;

        private global::Gtk.ToggleButton saveAndCloseButton;

        private global::Gtk.ToggleButton closeButton;

        protected virtual void Build ()
        {

使用したい場所は次のとおりです (Settings クラスのインスタンスを使用する他のクラスで): settings.settingsTreeView.Model = settingsListStore;

エラーメッセージは次のとおりです。

Error CS0122: `XX_xxxxx.Settings.settingsTreeView' is inaccessible 
    due to its protection level (CS0122) (XX_xxxx_GUI)
4

2 に答える 2

1

通常、コントロールはプライベートとしてマークされ、他のモジュールのコードがクラスの属性に直接到達して変更するのを防ぎます。良いニュースは、あなたがやろうとしていることを行うための別の (IMHO) より良い方法があるということです。生成されたクラスは部分的としてマークされているため、生成されていない部分的な設定クラスを、他のクラスが UI と対話するために必要なものに追加する内部メソッドと一緒に使用できます。

このアプローチは、他のクラスが Settings クラスのプライベート メンバー (コントロール) と対話する方法を制御できるため、一般的に優れていると考えられています。したがって、次のようなメソッドを追加できます。

public partial class Settings
{ 
    internal void SetModel(ModelType model)
    {
        // Check if valid model and throw some type of argument exception if not
        settingsTreeView.Model = model;
    }
}

そして、次のように呼び出します。

settings.SetModel(settingsListStore);
于 2015-03-31T16:36:24.263 に答える