C#创建可视属性窗体,想实现类似VS编辑器一样的,在右边显示控件属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#创建可视属性窗体,想实现类似VS编辑器一样的,在右边显示控件属性相关的知识,希望对你有一定的参考价值。

怎么搞属性还可以修改

参考技术A

很简单:

1.在工具箱中拖一个PropertyGrid控件,

2.然后把你要设置属性的控件给propertyGrid的SelectedObject指定 。

  如: this.propertyGrid1.SelectedObject = this.groupBox1;

追问

能不能发个demo给我啊?谢谢了啊。

追答

大哥,我告诉你,其实就一行代码:
this.propertyGrid1.SelectedObject = this.groupBox1;

如果需要点击某个控件,实现动态的话。最笨的方法就是每个控件注册Click事件。
点击的时候给this.propertyGrid1.SelectedObject 赋值。
要通用的话需要实现。net的提供的接口,比较复杂

追问

我在问下,用propertygrid属性值里面的可以从数据库里面取得吗?

追答

从数据中获取可以的。
你只需给你的相应的控件的属性赋值,那么propertyGrid会跟着变。 也可以给propertyGrid赋值,控件也会跟着变。

本回答被提问者采纳

创建一个对所有对象进行操作的 C# VS2010 Visualizer

【中文标题】创建一个对所有对象进行操作的 C# VS2010 Visualizer【英文标题】:Creating a C# VS2010 Visualizer that operates on all Object 【发布时间】:2011-12-03 05:55:41 【问题描述】:

我正在尝试创建一个可以对所有对象执行可视化的 C# 调试可视化工具。我似乎无法获得程序集属性(在命名空间之上)将此可视化器绑定到 System.Object,就像我已经能够与系统中的其他对象一样。我已经进行了详细搜索,但没有找到任何关于为所有对象创建可视化器的示例/讨论。这是我正在尝试运行的代码,它在绑定到 String 或 Int32 时运行良好,但不是 Object 或 object。

[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(Visualizers.ObjectVisualizer), typeof(Visualizers.RawObjectScource),
Target = typeof(object), Description = "Object Visualizer")]
namespace Visualizers

public class ObjectVisualizer : DialogDebuggerVisualizer

    override protected void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
    
        Console.Out.WriteLine("InShow");
        MessageBox.Show(objectProvider.GetObject().ToString());
    


// handle any object, doesn't require that it's Serializable
public class RawObjectScource : VisualizerObjectSource

    public override void GetData(object target, Stream outgoingData)
    
        if (target != null)
        
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(outgoingData, target.ToString());
        
    


作为一名使用 IntelliJ 的前 Java 程序员,我习惯于在调试模式下查看特定引用所指向的堆地址。这使您可以一目了然地查看两个对象是否引用相等。此外,还有一些其他值得了解的事情,但解释起来可能有点冗长。如果我可以让它工作,我会发布最终代码。

那么有谁知道如何让可视化工具对所有对象都处于活动状态?

【问题讨论】:

为什么你需要知道汇编 system.object 是什么?我看不出您显然在哪里引用程序集。 对不起,我应该使用属性而不是引用,正在编辑。 如果您需要比较两个对象是否相等,只需使用调试器监视窗口,在其中输入变量名称,然后从每个变量的弹出菜单中执行“生成对象 ID”。如果它们具有相同的对象 ID,则意味着它们指向相同的对象引用。 如果我错了,请纠正我,但 Target 属性的 DebuggerVisualizer 不应该指向可序列化的数据类型吗? 【参考方案1】:

我不知道你的代码有什么问题。 但是@Bismark,目标不必序列化,因为您可以使用自己的VisualizerObjectSource 对其进行序列化

我确实建议您将.GetType().AsseblyQualifierName 与它一起序列化,这将允许您了解流包含什么样的对象,因此在反序列化时您知道您的对象实际上是x 类的实例,我使用了这个使用我自己的可视化工具之一,因为有时您可能会在反序列化时序列化该类的子类型,而您不知道自己的工作时间。

【讨论】:

以上是关于C#创建可视属性窗体,想实现类似VS编辑器一样的,在右边显示控件属性的主要内容,如果未能解决你的问题,请参考以下文章

c#中窗口怎样才能运行时直接是全屏?

c#窗体

创建一个对所有对象进行操作的 C# VS2010 Visualizer

c#如何单击按钮显示另一个窗体

vs2008,c#,我想修改窗口控件的位置和大小。

窗体中怎么让toolstrip漂浮(停靠已经做出来了)(C#)