问题标签 [system.componentmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
996 浏览

winforms - 继承的控件可见/启用属性值始终为真:PropertyGrid

我创建了一个自定义 WinForms 托管环境。其中有一个工具箱和一个 PropertyGrid。

工具箱中显示的控件继承自现有的 WinForm 控件。

下拉列表来源:

我已经实现ICustomTypeDescriptor过滤掉我不想在PropertyGrid.

问题:

我在序列化从类继承的Enabled&Visible属性的值时遇到问题。System.Windows.Forms.Control

WriteProperties 方法 ( BasicDesignerLoader):

问题 #1: &属性的ShouldSerializeValue方法总是返回 false。EnabledVisible

问题#2:即使我跳过ShouldSerializeValue方法检查总是返回的GetValue方法。PropertyDescriptorTrue

当前解决方法: 作为一种解决方法,我目前使用 隐藏了Enabled&属性,并创建了另外两个布尔属性并使用 将它们的显示名称更改为& 。VisibleBrowsableAttributeDisplayNameAttributeEnableVisible

但是对于这种解决方法,我必须在每个控件中编写这些片段。

我错过了什么或做错了什么?为什么Enabled&Visible属性不变?

0 投票
2 回答
3537 浏览

c# - 枚举表单控件

我有这个 C# 代码来枚举 Form 实例的控件:

这列出了 TextBox 中 Form form2 的所有控件名称。这是我在 PowerShell 中重现此代码的尝试:

但这不起作用。$form.Control 似乎是空的,所以永远不会进入 foreach 循环。如何使上述 C# 代码在 PowerShell 中工作?

[编辑 1]

上面的代码显然有一个没有控件的表单。这是更新的 PowerShell 代码,其中包含一个添加到其 Controls 集合中的 Button 表单,但(似乎)与未枚举 Controls 集合的结果相同:

[编辑 2]

如果我检查 $property 类型:

GetType() 返回:

System.ComponentModel.PropertyDescriptorCollection

我期望 PropertyDescriptor 的地方。

0 投票
2 回答
935 浏览

.net - 如何在 MEF 中导出类型,就好像导出属性已应用于该类型一样?

我想在运行时动态地将 MEF Export 属性应用于类型,就像该类型在编译时应用了 Export 属性一样。

有没有一种简单的方法可以做到这一点?

除此之外,是否有一种复杂的方法可以做到这一点?

0 投票
2 回答
9750 浏览

c# - 什么是聚合目录?

是什么AggregateCatalog?当你构造一个时它是什么意思new AggregateCatalog()?将程序集添加到目录时意味着什么,例如catalog.Catalogs.Add(new AssemblyCatalog(someAssembly))?除了组件之外,您还可以将哪些内容添加到目录中?任何与此相关的一般知识也会有所帮助(我完全是菜鸟)

0 投票
1 回答
2715 浏览

c# - 尝试从 Windows 应用程序启动 Windows 服务,给出 System.ComponentModel.Win32Exception:访问被拒绝

我正在尝试开发一个 Windows 应用程序来启动/停止和监视两个特定服务的状态。

问题是我得到

System.ComponentModel.Win32Exception:访问被拒绝

请注意,这两个服务都是本地系统

以下是我的代码

0 投票
1 回答
18077 浏览

c# - 何时以及为什么我们应该使用类 System.ComponentModel.Container?

有人可以解释一下我们应该何时以及为什么要使用System.ComponentModel.Container吗?最近我在这里遇到了这个类的使用,但真的不明白这个类能给我们带来什么好处。

0 投票
1 回答
3590 浏览

c# - Understand Component.GetService()

i have a method in a Usercontrol with this code

I want to move this method to a "Proxy" class that is going to act as an intermediary between Visual Studio and my application. The problem is that GetService only return the active document correctly if it is call inside the control. When i move that method to the Proxy class, GetService doesn't have definition. I search that this method comes from ComponentModel.Component, so i made the Proxy class derive from Component. Everything compiles OK but always when i ask for the active document an exception occurs. I thing that i'm not understanding well how works the GetService() method. Please help with this.

0 投票
2 回答
4633 浏览

.net - .NET:如何在特定线程上调用委托?(ISynchronizeInvoke、Dispatcher、AsyncOperation、SynchronizationContext 等)

首先请注意,此问题未标记为或任何其他特定于 GUI 的内容。这是有意的,你很快就会看到。

其次,对不起,如果这个问题有点长。我试图将到处飘荡的各种信息汇集在一起​​,以提供有价值的信息。然而,我的问题就在“我想知道的”下面。

我的任务是最终了解 .NET 提供的在特定线程上调用委托的各种方法。


我想知道的:

  • 我正在寻找最通用的方式(不是 Winforms 或 WPF 特定的)来调用特定线程上的委托。

  • 或者,换种说法:我会感兴趣,如果以及如何,不同的方式来做到这一点(例如通过 WPF's Dispatcher)相互利用;也就是说,如果所有其他人都使用一种通用的跨线程委托调用机制。


我已经知道的:

  • 有很多与这个主题相关的课程;其中:

    • SynchronizationContext (in System.Threading)
      如果我不得不猜测,那将是最基本的一个;虽然我不明白它到底是做什么的,也不知道它是如何使用的。

    • AsyncOperation& (in ) 这些似乎是. 不知道如何使用它们。AsyncOperationManager System.ComponentModel
      SynchronizationContext

    • WindowsFormsSynchronizationContext (in System.Windows.Forms)
      的子类SynchronizationContext

    • ISynchronizeInvoke (in System.ComponentModel)
      由 Windows 窗体使用。(Control该类实现了这一点。如果我不得不猜测,我会说这个实现使用了WindowsFormsSynchronizationContext.)

    • Dispatcher& (in ) 似乎后者是 的另一个子类,而前者代表它。DispatcherSynchronizationContext System.Windows.Threading
      SynchronizationContext

  • 一些线程有自己的消息循环以及消息队列。

    (关于消息和消息队列的 MSDN 页面有一些关于消息循环如何在系统级别工作的介绍性背景信息,即作为 Windows API 的消息队列。)

    我可以看到如何为带有消息队列的线程实现跨线程调用。PostThreadMessage使用 Windows API,您可以通过包含调用某个委托的指令将消息放入特定线程的消息队列中。在该线程上运行的消息循环最终将获得该消息,并且将调用委托。

    根据我在 MSDN 上阅读的内容,线程不会自动拥有自己的消息队列。例如,当一个线程创建了一个窗口时,一个消息队列将变得可用。没有消息队列,线程有消息循环是没有意义的。

    那么,当目标线程没有消息循环时,是否可以进行跨线程委托调用?比方说,在 .NET 控制台应用程序中?(从这个问题的答案来看,我想控制台应用程序确实不可能。)

0 投票
1 回答
941 浏览

compact-framework - 如何在 Compact Framework 上处理 Forms.Timer

在 Compact Framework 上,System.Windows.Forms.Timer 类不支持 system.componentmodel 构造函数:

支持新的 Timer():http: //msdn.microsoft.com/en-us/library/aa335543 (v=vs.71).aspx

不支持新计时器(IContainer 容器):http: //msdn.microsoft.com/en-us/library/aa335544 (v=vs.71).aspx

这意味着,当我将计时器添加到 CF 应用程序中的表单时,它不会被添加到表单的 IContainer 组件字段中,因此当表单被 dispose()d 时,它不会得到 auto-dispose()d。

为什么不支持这个?

当我的表单被处置时,我应该如何最好地处置计时器?看来我有两个主要选择:

  • 将表单的 dispose() 方法从 .designer.cs 移到我的主 .cs 文件中,并在其中添加手动“_timer.dispose()”调用
  • 或在调用 InitializeComponent() 之后,在创建表单时手动将 Timer 对象添加到组件集合中

我应该更喜欢哪个?如果我忘记执行这两个操作之一,则 Timer 将永远存在,使我的表单保持活动状态(因为 Timer 无法被 GC,并且它包含对我表单的 Timer_Tick() 方法的引用,因此表单永远不会被 GC )。

这个实施决定是否反映了我需要注意的关于计时器和处理 CF 机器的一些奇怪之处?

0 投票
5 回答
8916 浏览

c# - 获取属性名的Linq表达式和扩展方法

我正在看这篇文章,它描述了一种在 POCO 属性之间进行数据绑定的简单方法:数据绑定 POCO 属性

Bevan 的评论之一包括一个简单的 Binder 类,可用于完成此类数据绑定。它非常适合我的需要,但我想实施 Bevan 为改进课程而提出的一些建议,即:

  • 检查是否分配了源和目标
  • 检查 sourcePropertyName 和 targetPropertyName 标识的属性是否存在
  • 检查两个属性之间的类型兼容性

此外,鉴于按字符串指定属性容易出错,您可以改用 Linq 表达式和扩展方法。然后代替写作

你可以写

我很确定我可以处理前三个(尽管可以随意包含这些更改),但我不知道如何使用 Linq 表达式和扩展方法来编写代码而不使用属性名称字符串。

有小费吗?

这是链接中的原始代码: