- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正忙于编写一个 CodeSmith 模板,它的属性之一是类型 System.Type
.我希望能够使用 UI 选择程序集,加载程序集,然后显示该程序集中可用的类型。然后我可以去选择其中一种。
有没有人遇到或编写过执行此操作或类似操作的代码?
最佳答案
我手头没有任何东西,但敲一个并不是很难……最大的问题是不卸载dll的问题……但是一个粗略的例子:
(这使用字符串 AssemblyQualifiedName
,但 Type
的工作原理几乎相同 - 只需更改大约 3 行)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using System.Reflection;
using System.Windows.Forms;
using System.Windows.Forms.Design;
class MyData {
[Editor(typeof(TypeTypeEditor), typeof(UITypeEditor))]
[DisplayName("Some Type"), Description("Which type to use...")]
public string SomeType { get; set; }
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.Run(new Form {
Controls = {
new PropertyGrid {
Dock = DockStyle.Fill,
SelectedObject = new MyData()
}
}
});
}
}
class TypeTypeEditor : UITypeEditor {
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) {
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value) {
IWindowsFormsEditorService svc = provider == null ? null
: provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
if (svc != null) {
using(TypeForm form = new TypeForm()) {
form.TypeName = Convert.ToString(value);
if (svc.ShowDialog(form) == DialogResult.OK) {
value = form.TypeName;
}
}
}
return value;
}
}
class TypeForm : Form {
public string TypeName { get; set; }
Button ok, load;
TreeView tree;
public TypeForm() {
Text = "Select type";
ok = new Button { Text = "OK" };
ok.Enabled = false;
ok.DialogResult = DialogResult.OK;
load = new Button { Text = "Load..." };
load.Dock = ok.Dock = DockStyle.Bottom;
this.AcceptButton = ok;
tree = new TreeView();
tree.Dock = DockStyle.Fill;
load.Click += load_Click;
Controls.Add(load);
Controls.Add(ok);
Controls.Add(tree);
tree.AfterSelect += tree_AfterSelect;
}
void tree_AfterSelect(object sender, TreeViewEventArgs e) {
ok.Enabled = false;
if (e.Node != null && e.Node.Tag != null) {
string s = Convert.ToString(e.Node.Tag);
if (!string.IsNullOrEmpty(s)) {
TypeName = s;
ok.Enabled = true;
}
}
}
void load_Click(object sender, EventArgs e) {
try {
string path = null;
using (OpenFileDialog dlg = new OpenFileDialog()) {
dlg.Filter = "dll|*.dll|exe|*.exe";
if (dlg.ShowDialog(this) == DialogResult.OK) {
path = dlg.FileName;
}
}
if (!string.IsNullOrEmpty(path)) {
Assembly asm = Assembly.LoadFrom(path);
SortedList<string, TreeNode> namespaces = new SortedList<string, TreeNode>();
foreach (Type type in asm.GetTypes()) {
if (!type.IsPublic) continue;
TreeNode nsNode;
if (!namespaces.TryGetValue(type.Namespace, out nsNode)) {
nsNode = new TreeNode(type.Namespace);
namespaces.Add(type.Namespace, nsNode);
}
nsNode.Nodes.Add(type.Name).Tag = type.AssemblyQualifiedName;
}
tree.BeginUpdate();
tree.Nodes.Clear();
try {
foreach (TreeNode node in namespaces.Values) {
tree.Nodes.Add(node);
}
}
finally {
tree.EndUpdate();
}
}
}
catch (Exception ex) {
MessageBox.Show(this, ex.Message, ex.GetType().Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
关于codesmith - 任何人都有选择 System.Type 实例的 UITypeEditor 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298643/
我有一个自定义的 UITypeEditor,用于使用 propertygrid 与我的程序进行颜色选择,但如果我只公开 system.drawing.color,我似乎无法激活它。我需要用 Custo
我创建了一个自定义 UITypeEditor,它启动一个表单 (StringSelector) 以显示用户从中选择的字符串列表。问题是这个表单需要知道要使用什么 StringManager(strin
我目前希望使用 PropertyGrid 来允许用户编辑我的一些类,但是我在将对象传递给他们使用的 UITypeEditor 时遇到了困难。当用户按下下拉菜单时,我想显示一个包含已加载纹理的列表框以供
我有一个扩展器(IExtenderProvider),它扩展了某些类型的 具有附加属性的控件。对于这些属性之一,我有 写了一个 UITypeEditor。到目前为止,一切正常。 扩展器本身也有几个属性
我有一个属性网格,其中一个属性使用 UITypeEditor编辑值(在表单上)。 但是该属性仍然是可编辑的,这是我不想要的。有没有办法做到这一点?我看了这个类似的问题Propertygrid UIEd
我为一个属性创建了一个编辑器。但是,我想将一些参数传递给编辑器的构造函数,但我不确定如何执行此操作。 FOO _foo = new foo(); [Editor(typeof(MyEditor), t
我有一个属性网格,当单击其中一个属性的按钮时,某些字段会被填充。但是属性的集合不会被触发。我不知道为什么。 private OptoSigmaSettings dataToGet = new Opt
我正在尝试编写一个简单的属性网格,以允许用户修改图表的颜色。默认情况下,图表具有“Palette”属性,该属性的枚举类型为“ChartColorPalette”。如果作为我的属性网格基础的对象也具有相
我有一个自定义对象,可以通过自定义 TypeEditor(谈论 .NET、c# 和 winforms)从 PropertyGrid (DevExpress) 进行编辑。 我的自定义 UITypeEdi
我创建了一个自定义 UITypeEditor。 我能否从 UITypeEditor 类内部插入一个属性,该属性也将 TypeConverter 附加到我的属性? 我已经尝试了以下方法,但无论我如何扭曲
我想避免在我为其编写自定义 UITypeEditor 的特定类型的每个实例上放置 EditorAttribute。 我无法在类型上放置 EditorAttribute,因为我无法修改源。 我有一个将要
根据 http://msdn.microsoft.com/en-us/library/system.drawing.design.uitypeeditoreditstyle.aspx,我有一个 Win
我想知道 .Net-3.5 是否带有内置 List或 string[] TypeConverter或 UITypeEditor这样我就可以从属性网格编辑这种属性。 最佳答案 UITypeEditor
我正在调整 WinForms 应用程序。此应用程序有一个包含 PropertyGrid 的 Form。一个对象被分配给 SelectedObject 属性,以便属性网格显示该对象的属性。 分配的对象类
我试图全面了解您如何使用 ICustomTypeDescriptor、TypeDescriptionProvider、TypeConverter 和 UITypeEditor 来更改 Property
我正忙于编写一个 CodeSmith 模板,它的属性之一是类型 System.Type .我希望能够使用 UI 选择程序集,加载程序集,然后显示该程序集中可用的类型。然后我可以去选择其中一种。 有没有
我有一个具有一些属性的类。更改其中一个后,我想使用react并更改另一个属性。此操作应由 UITypeEditor 或 TypeConverter 完成,而不是由类本身的事件完成。 我不想使用 INo
在 Visual Studio 中,当您在解决方案资源管理器中选择项目或项目项时,有时您可能希望将自定义属性添加到属性窗口(按 F4 时弹出的窗口)。此外,要填写这些属性的值,我需要添加一个按钮来弹出
这是一个令人尴尬的问题,但我觉得我在过去几个小时里尝试了一切。 我只想在我的属性中添加以下属性 #using #using ... using namespace System::Draw
我是一名优秀的程序员,十分优秀!