1

winform アプリケーションで、ビジュアル スタジオのプロパティ ウィンドウのようなパネルをデザインしたいと考えています。実際、コンボボックスをセルの1つとして受け入れることができるグリッドが必要なため、ユーザーは入力する代わりにその項目の1つを選択できます。

wpfで可能であることは知っていますが、winformアプリでこれを行う方法があるかどうか知りたいですか?

編集:この例では、FooProperty の直前に FooForm の結果を表示する方法を探しています。

注:実際のアプリケーションのスクリーン ショットをここに配置することはできません。しかし、私は自分のプロパティ グリッドに次の図のようなものを持っていて、選択した背景画像の名前を (なし) 値ではなく赤い四角形で指定された BackgroudImage プロパティの値として表示したいと考えています。

ここに画像の説明を入力

これを行う方法があれば教えてください。

4

3 に答える 3

3

PropertyGridグリッドは;を介して提供できます。System.ComponentModelこれは非常に柔軟ですが、非常に複雑な実装を使用します。ただし、推奨値を提供するには、 のGetStandardValues方法を使用しますTypeConverter。完全な例:

(編集: 必要CanConvertFrom/ConvertFromコンボとして機能する)

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{

    public class MyType
    {
        [TypeConverter(typeof(GiveMeOptionsConverter))]
        public string SomeProperty {get;set;}


        private class GiveMeOptionsConverter : TypeConverter
        {
            public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
            {
                return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
            }
            public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                if (value is string) return value;
                return base.ConvertFrom(context, culture, value);
            }
            public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
            {
                return true;
            }
            public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
            {
                return false; // true is drop-down; false is combo
            }
            public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
            {
                // this gives you the `MyType` instance if you need it
                var obj = (MyType)context.Instance;

                return new StandardValuesCollection(
                    new[] { "abc", "def", "ghi" });
            }
        }
    }
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            using (var grid = new PropertyGrid {
                Dock = DockStyle.Fill,
                SelectedObject = new MyType()
            })
            using (var form = new Form { Controls = { grid } })
            {
                Application.Run(form);
            }

        }
    }
}
于 2013-09-23T08:03:39.127 に答える
3

System.Windows.Forms.PropertyGridコントロールを使用できます。インターネット上でたくさんの例を見つけることができます。

于 2013-09-23T07:59:32.373 に答える
1

これを行うには、PropertyGrid とカスタム タイプ エディターを使用できます。

ここでは、プロパティ グリッドでできることと、カスタム UI タイプ エディターを使用する方法について詳しく説明します。

http://msdn.microsoft.com/en-us/library/aa302326.aspx

于 2013-09-23T07:59:19.110 に答える