var connection = ConnectionFactory.GetConnection(
ConfigurationManager.ConnectionStrings["Test"]
.ConnectionString, DataBaseProvider);
Run Code Online (Sandbox Code Playgroud)
这是我的App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Test" connectionString="Data Source=.;Initial Catalog=OmidPayamak;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是当我的项目运行时,这是我的错误:
你调用的对象是空的.
有没有人在开发控件时找到了解决DesignMode问题的有用方法?
问题是,如果嵌套控件,则DesignMode仅适用于第一级.第二级和更低级别的DesignMode将始终返回FALSE.
标准的hack一直在查看正在运行的进程的名称,如果它是"DevEnv.EXE"那么它必须是studio,因此DesignMode真的是真的.
问题是寻找ProcessName通过注册表和其他奇怪的部分工作,最终结果是用户可能没有查看进程名称所需的权限.另外这条奇怪的路线很慢.所以我们不得不堆积额外的黑客来使用单例,如果在请求进程名称时抛出错误,则假设DesignMode为FALSE.
确定DesignMode的一个很好的干净方法是有序的.让微软在框架内部修复它会更好!
当我在Visual Studio的设计器中打开Windows窗体表单时,我的代码中出现了一些错误.我希望在我的代码中进行分支,如果表单由设计者打开,则执行不同的初始化,而不是实际运行.
如何在运行时确定代码是否作为设计人员打开表单的一部分执行?
我有一个用户控件,我正在构建.它的目的是向用户显示类的状态.显然,这并不重要,并且当控件在IDE中运行时会降低速度,就像将其添加到表单中一样.
解决此问题的一种方法是在运行时创建控件并将其添加到窗体的控件集合中.但这似乎并不完美.
有没有办法在控件中设置一个标志,以便它可以根据它的运行方式跳过某些代码段?
ps我正在使用C#和VS 2008
如果您有一个显示数据的表单,您可以做的一件事是this.DesignMode在构造函数中引用以避免在设计器中填充它:
public partial class SetupForm : Form
{
private SetupItemContainer container = new SetupItemContainer();
public SetupForm()
{
InitializeComponent();
if (!this.DesignMode)
{
this.bindingSource1.DataSource = this.container;
this.Fill();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您决定将该表单重新编写为UserControl,保持相同的构造函数逻辑,this.DesignMode则会出现意外情况 - 无论如何都是假的.这导致设计者调用您的逻辑,这些逻辑意味着在运行时发生.
我刚刚在博客文章中发现了一条评论,似乎对此进行了修复,但它引用了LicenseManager类的功能,作为在UserControl中按预期工作的替代品.
所以对于UserControl,我可以这样做:
public partial class AffiliateSetup : UserControl
{
private AffiliateItemContainer container = new AffiliateItemContainer();
public AffiliateSetup()
{
InitializeComponent();
if (LicenseManager.UsageMode == LicenseUsageMode.Runtime)
{
this.bindingSource1.DataSource = this.container;
this.Fill();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用LicenseManager而不是DesignMode有任何警告或暗示可能会阻止我放入我的生产代码?
第1步:创建内联控件类
Public Class Test_Control
Inherits ListBox
Public Sub New()
Items.Add("test")
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
第2步:在设计器中将类拖到窗体中

第3步:运行项目
结果:

为什么会这样?!我完全被困在这里..我用谷歌搜索和谷歌搜索,我找不到任何解决方案或答案.
这给我带来了一些重大问题.我只是想为每个新创建的Combobox添加一个初始的"Select one ..."选项.每个继承的控件类都会发生同样的事情,无论控件类型如何(textbox/combobox/listbox/etc).
如果我在New()中使用消息框,也会发生同样的事情.运行应用程序后会立即显示两个消息框.
