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. C - 文字列リンクリスト
- 5. C++ - アルファベット文字列
- 6. 文字列C#の
- 7. 文字列のC#
- 8. C++ ifstream文字列
- 9. スプリット文字列C++
- 10. C#文字列フォーマットプレースホルダ
- 11. C#の文字列
- 12. C++文字列配列
- 13. Cの文字列配列
- 14. VBAエディタでの文字エンコーディング
- 15. C文字列を印刷ジャンク文字
- 16. Cプラクティステスト用文字と文字列
- 17. C#string.split()別の文字列(大文字)
- 18. cの文字列と文字
- 19. ナチュラルソートC - "数字と文字を含む文字列の配列"
- 20. Cの文字列の配列の文字列をチェックする
- 21. 文字列を文字列に変換する方法hash_map(文字列、文字列、stringHashFunction>をLinuxでC++
- 22. c#文字列のRegex文字以外の文字
- 23. クラス内のC++文字列
- 24. C#文字列操作
- 25. C++文字列の追加
- 26. C#で文字列をシフト
- 27. C++アンパサンドオペレータと文字配列
- 28. C#たIPAddress文字列
- 29. 文字列反復C#モノ
- 30. C++文字列の比較
あなたがあなた自身のUITypeEditorで*この一部*を行うことができます。代わりに初期のアプリでどこかに、以下を適用し、
[Editor(...)]
を追加します。 –