0

コンボボックスと同じ機能を取得しようとしています。たとえば、combobox1.Items.Add() // editor.Tags.Tags1()

このような:

class Main()
{
    // The editor is passed into the editor class, that allows the editor class to update the editor.
    MyEditorClass editor = new MyEditorClass(editorBox);
    editor.Tags.InsertTag1();

    // Now i don't want people to do this
    // MyEditorClass.TagClass tags = new MyEditorClass.TagClass();
}

これは、tags クラスが MyEditorClass に渡された editorBox を呼び出し、そのエディターなしで tags クラスを作成すると機能しないためです。

私の MyEditorClass は次のようになります。

public class MyEditorClass
{
    static RichTextBox editor;
    public TagClass Tags;

    public MyEditorClass(RichTextBox editorBox)
    {
        editor = editorBox;
        Tags = new TagClass();
    }



    public class TagClass
    {
        public void InsertTag1()
        {
            editor.Text += "Test tag 1";
        }
    }
}

TagClass を静的にしようとしましたが、うまくいきませんでした。コンボボックスはどのように構成されていますか? Combobox.Items は使用できませんが、宣言すると、宣言したもので Combobox.Items を使用できます。

4

2 に答える 2

1

Tagsプロパティをreadonly作成すると、コンストラクターでのみ初期化できます。

public readonly TagClass Tags;

に格納されているオブジェクト参照は、Tags後で変更することはできず、そのコード:

MyEditorClass editor = new MyEditorClass(editorBox);
editor.Tags = new MyEditorClass.TagClass();

コンパイルしません。

または、2 番目の可能性としては、以下の例のように、プロパティのパブリック ゲッターのみを公開し、クラスTags内でインスタンスをプライベートに保持することをお勧めします。MyEditorClass

ちなみに、入れ子になっているクラスでは何もする必要はありません。public クラスの中に public クラスがあるというのはかなり奇妙です。


編集:エディタにアクセスできるよう に似た構造にするComboBoxためにTagClass、エディタインスタンスをTagClass内部コンストラクタに渡すことができます。コンストラクターは、外部コードがTagClass直接使用できないようにするために内部的なものです。

public class MyEditorClass
{
    private readonly RichTextBox editor;
    private readonly TagClass tags;

    public TagClass Tags
    {
        get 
        {
            return tags; 
        } 
    }

    public MyEditorClass(RichTextBox editorBox)
    {
        editor = editorBox;
        tags = new TagClass(editorBox);
    }
}

public class TagClass
{
    private RichTextBox _editor;

    internal TagClass(RichTextBox editor)
    {
        _editor = editor;
    }

    public void InsertTag1()
    {
        _editor.Text += "Test tag 1";
    }
 }

そして今、これはうまくいくでしょう:

MyEditorClass editor = new MyEditorClass(editorBox);
editor.Tags.InsertTag1();
于 2010-11-30T09:41:29.973 に答える
0

TagClassクラスに、タイプMyEditorClassのメンバーを追加し、新しいTagClassインスタンスを作成するときに割り当てます。

public class TagClass
{
    private MyEditorClass editor = null;

    public TagClass(MyEditorClass parent)
    {
        this.editor = parent;
    }

    public void InsertTag1()
    {
        editor.Text += "Test tag 1";
    }
}

...

Tags = new TagClass(this);
于 2010-11-30T10:22:05.030 に答える