4

カスタム コントロールの複数値の複雑なプロパティを作成しようとしていますが、それが機能しないコードを記述しました。プロパティ エクスプローラーに表示されるのは、複数値の読み取り専用プロパティのみです。これがそのコードです

private MyComboProperties _MyComboProperties;

public MyComboProperties MyComboPropertiesValues
{
    get
    {
        return _MyComboProperties;
    }
    set
    {
        _MyComboProperties = value;
    }
}

//MyComboProperties struct is like this

[System.Runtime.InteropServices.ComVisible(true)]
public struct MyComboProperties
{
    private string _MySourceQuery;
    private string _MyDisplayMember;
    private string _MyValueMember;

    public MyComboProperties(string mySourceQuery, string myDisplayMember, string myValueMember)
    {
        _MySourceQuery = mySourceQuery;
        _MyDisplayMember = myDisplayMember;
        _MyValueMember = myValueMember;
    }

    public string MySourceQuery
    {
        get
        {
            return _MySourceQuery;
        }
        set
        {
            _MySourceQuery = value;
        }
    }

    public string MyDisplayMember
    {
        get
        {
            return _MyDisplayMember;
        }
        set
        {
            _MyDisplayMember = value;
        }
    }

    public string MyValueMember
    { 
        get
        {
            return _MyValueMember;
        }
        set
        {
            _MyValueMember = value;
        }
    }
}

または、誰かが 3 つの入力文字列値を持つ複数値のカスタム コントロールのサンプル コードを提供してくれます。

4

1 に答える 1

2

以下のコードを使用して、目的を達成してください。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Globalization;

namespace ExpandableMultiValuedCustomControl
{
public partial class MyComboBox : System.Windows.Forms.ComboBox
{
    private MyComboProperties _comboProperties = new MyComboProperties();
    public MyComboBox()
    {
        InitializeComponent();
    }

    public MyComboBox(IContainer container)
    {
        container.Add(this);

        InitializeComponent();
    }

    [Category("My Combo Properties")]
    [DisplayName("My Combo Properties")]
    [Description("My Combo Properties")]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public MyComboProperties MyComboProperties
    {
        get
        {
            return _comboProperties;
        }
        set
        {
            _comboProperties = value;
        }
    }
}

[DisplayName("My Combo Properties")]
[Description("CMy Combo Properties")]
[DefaultProperty("Text")]
[DesignerCategory("Component")]
[TypeConverter(typeof(ExpandableObjectConverter))]

public class MyComboProperties
{
    private string _MySourceQuery;
    private string _MyDisplayMember;
    private string _MyValueMember;
    public MyComboProperties()
    {

    }

    [Category("MyComboBoxProperties")]
    [DisplayName("MySourceQuery")]
    [Description("MySourceQuery")]
    public string MySourceQuery
    {
        get
        {
            return _MySourceQuery;
        }
        set
        {
            _MySourceQuery = value;
        }
    }

    [Category("MyComboBoxProperties")]
    [DisplayName("MyDisplayMember")]
    [Description("MyDisplayMember")]
    public string MyDisplayMember
    {
        get
        {
            return _MyDisplayMember;
        }
        set
        {
            _MyDisplayMember = value;
        }
    }

    [Category("MyComboBoxProperties")]
    [DisplayName("MyValueMember")]
    [Description("MyValueMember")]
    public string MyValueMember
    {
        get
        {
            return _MyValueMember;
        }
        set
        {
            _MyValueMember = value;
        }
    }
    }
}

これらのプロパティにアクセスするには、次のようにアクセスする必要があります。

myComboBox1.MyComboProperties.MyDisplayMember 
myComboBox1.MyComboProperties.MyValueMember 
myComboBox1.MyComboProperties.MySourceQuery
于 2013-08-30T05:42:20.557 に答える