Visual StudioのようなエディタをPropertyGridの文字列に使用する最も簡単な方法は何ですか?例えばAutos/Locals/Watchesでは文字列の値をプレビュー/編集することができますが、虫眼鏡をクリックして外部のウィンドウに文字列を表示することもできます。C#プロパティグリッド文字列エディタ
7
A
答えて
8
UITypeEditor
でこれを行うことができます。ここで私は、個々のプロパティでそれを使用していますが、(あなたはすべてのプロパティを飾るために必要がないように)IIRCあなたはまた、すべての文字列を覆すことができます。
using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using(var frm = new Form { Controls = { new PropertyGrid {
Dock = DockStyle.Fill, SelectedObject = new Foo { Bar = "abc"}}}})
{
Application.Run(frm);
}
}
}
class Foo
{
[Editor(typeof(FancyStringEditor), typeof(UITypeEditor))]
public string Bar { get; set; }
}
class FancyStringEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
var svc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (svc != null)
{
using (var frm = new Form { Text = "Your editor here"})
using (var txt = new TextBox { Text = (string)value, Dock = DockStyle.Fill, Multiline = true })
using (var ok = new Button { Text = "OK", Dock = DockStyle.Bottom })
{
frm.Controls.Add(txt);
frm.Controls.Add(ok);
frm.AcceptButton = ok;
ok.DialogResult = DialogResult.OK;
if (svc.ShowDialog(frm) == DialogResult.OK)
{
value = txt.Text;
}
}
}
return value;
}
}
がすべてのためにこれを適用するには文字列のメンバー:
TypeDescriptor.AddAttributes(typeof(string), new EditorAttribute(
typeof(FancyStringEditor), typeof(UITypeEditor)));
+0
私は実際にあなたの答えをdownvoteする必要があります。なぜなら、私は怠け者になり、コードをコピー&ペーストするだけだからです。 ;) – John
+0
はい、このコードは完璧でシンプルですぐに動作します。ありがとう – IEnumerable
関連する問題
- 1. C++文字列
- 2. C:文字列
- 3. C++文字列
- 4. VBAエディタでの文字エンコーディング
- 5. 文字列のC#
- 6. C#文字列フォーマットプレースホルダ
- 7. C - 文字列リンクリスト
- 8. 文字列のC#
- 9. C++ ifstream文字列
- 10. C++ソートクラス文字列
- 11. 文字列のC#
- 12. スプリット文字列C++
- 13. C#の文字列
- 14. C++ - アルファベット文字列
- 15. 文字列は、C#
- 16. 文字列C#の
- 17. フォーマット文字列C++
- 18. C文字配列(C文字列)動的か?
- 19. Cの文字列配列
- 20. バブルソート文字列配列C#
- 21. C++文字列配列
- 22. C#string.split()別の文字列(大文字)
- 23. 小文字のC#文字列
- 24. cの文字列と文字
- 25. Cプラクティステスト用文字と文字列
- 26. C文字列を印刷ジャンク文字
- 27. C#大文字と小文字の文字列または文字列
- 28. ナチュラルソートC - "数字と文字を含む文字列の配列"
- 29. C - 文字列(文)を文字列リストに変換する
- 30. Cの文字列の配列の文字列をチェックする
あなたがあなた自身のUITypeEditorで*この一部*を行うことができます。代わりに初期のアプリでどこかに、以下を適用し、
[Editor(...)]
を追加します。 –