vs2008 自定义控件无法生成dll文件 c#
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2008 自定义控件无法生成dll文件 c#相关的知识,希望对你有一定的参考价值。
我在vs2008里自定义了一个控件,但是编译以后不仅不能在工具栏上显示,也没有看到生成的dll文件
最好能说说应该按照怎么样的顺序去自定义并使用控件
非常感谢!
解决方案>项目>类
方法比较多嘛,VS也提供了建立用户控件类型的项目。我给一种方法吧,不要局限于这种。
假设我需要定制一个textbox,使它具有这样的性质:有一个默认的字符串,这个字符串会显示在textbox里面,当这个textbox获得焦点后,textbox会清空这个默认字符串,当textbox失去焦点后,如果textbox的内容是空的话,会显示这个默认字符串。
1.新建一个解决方案Solution1。
文件-新建项目-其他类型项目-visual stdio空白解决方案
2.在这个解决方案里面添加2个项目:Solution1Test
右键解决方案-添加新建项目-Windows窗体应用程序(项目名称:Solution1Test)
右键解决方案-添加新建项目-类库(项目名称:MyTextBox)
3.这个时候系统自动帮你在MyTextBox里面产生了一个类Class1,把这个改个名叫MyTextBox,然后添加必要的引用:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
然后写入如下的内容:
namespace MyTextBox
public class MyTextBox:TextBox
/// <summary>
/// 默认的字符串
/// </summary>
string _DefaultString;
/// <summary>
/// 默认的字符串
/// </summary>
public string DefaultString
set _DefaultString = value;
this.Text = value;
public MyTextBox()
this._DefaultString = "请输入关键字";
this.Text = this._DefaultString;
protected override void OnEnter(EventArgs e)
if (this.Text == this._DefaultString)
this.Text = string.Empty;
base.OnEnter(e);
protected override void OnLeave(EventArgs e)
if (this.Text == string.Empty)
this.Text = this._DefaultString;
base.OnLeave(e);
4.把MyTextBox这个项目编译一下
右键-生成,在bin目录下面自然就会有个dll文件了。
5.转到Solution1Test,添加对MyTextBox的引用。这个时候,你在左边的工具箱里面应该就能看到这个MyTextBox了,直接拖到窗体上去,然后在窗体的构造函数里面设置一下MyTextBox的默认字符串,当然不设置也行,应为MyTextBox的构造函数已经初始化了一个默认的字符串:
public Form1()
InitializeComponent();
this.myTextBox1.DefaultString = "请输入关键字";
6.运行,效果和预期的一样。 参考技术A 将控件编译为程序集
按照以下这些步骤设置计算机的 Windows 环境 PATH 变量,使其包含 .NET Framework 的安装路径:
1,在 Windows 中,右击“我的电脑”,选择“属性”,单击“高级”选项卡,然后单击“环境变量”按钮。
2,在“系统变量”列表中,双击 Path 变量。
3,在“变量值”文本框中,将一个分号 (;) 添加到文本框中的现有值的末尾,然后键入您的 .NET Framework 安装路径。.NET Framework 通常安装在位于 C:\WINDOWS\Microsoft.NET\Framework\versionNumber 的 Windows 安装目录中。 (versionNumber是你的asp.net版本号如:v2.0.50727)
单击“确定”关闭每个对话框。
然后在 C:\WINDOWS\Microsoft.NET\Framework\versionNumber 所在的地址栏里
输入如下指令:
csc /t:library /out:A /r:System.dll /r:System.Web.dll B
你需要改的是 A,这个就是你要输出的dll文件名称,B也需要改(必改) 这个B 是你的cs文件所在的虚拟路径
如A 可以为Samples.AspNet.CS.Controls.dll B 可以为: F:\WebSite\Web测试大全\App_Code\WelcomeLabel.cs
如果编译成功则会在你的C:\WINDOWS\Microsoft.NET\Framework\versionNumber 文件里生成Samples.AspNet.CS.Controls.dll 这时候你就可以调用了 参考技术B 在VS2008中
操作如下
在VS的左边工具箱的标准中右键一下,有一个选择项,然后单击一下,在.Net Framework的组件里
浏览一下你刚刚生成的Dll文件,然后确定就行了,这样就能用了 参考技术C 高手如云
在 WPF C# 中无法访问用户控件的自定义属性
【中文标题】在 WPF C# 中无法访问用户控件的自定义属性【英文标题】:Custom Property of User Control not accessible in WPF C# 【发布时间】:2021-12-31 12:38:48 【问题描述】:我想使用 C# 在 WPF 中创建一个具有自定义属性 (MyLabel
) 的自定义用户控件 (UserControl
),而无需在后面编写任何代码。但是当我使用自定义控件时,我的自定义属性 MyLabel
在 MainWindow.xaml 中无法访问。我的代码有什么问题?如果我的实现是错误的,那么如何实现呢?
UCControl.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace WpfApp1
public class UCControl:UserControl
public String MyLabel
get return (String)GetValue(MyLabelProperty);
set SetValue(MyLabelProperty, value);
public static readonly DependencyProperty MyLabelProperty =
DependencyProperty
.Register(
"MyLabel",
typeof(string),
typeof(UCControl),
new PropertyMetadata(""));
public UCControl()
MyLabel = "default label";
UserControl1.xaml
<UserControl x:Class="WpfApp1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.DataContext>
<local:UCControl/>
</Grid.DataContext>
<TextBlock Text="Binding MyLabel" FontSize="18"/>
</Grid>
</UserControl>
MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid >
<local:UserControl1 MyLabel="Hello World"/>
</Grid>
</Window>
【问题讨论】:
public class UCControl:UserControl
是<UserControl x:Class="WpfApp1.UserControl1" ...>
后面的代码
UCControl 与 UserControl1 不匹配。
除此之外,写Text="Binding MyLabel, RelativeSource=RelativeSource AncestorType=UserControl"
@Clemens 我没有得到你的第一条评论。
您向我们展示了名为 UCControl 的 UserControl 背后的代码,但向我们展示了名为 UserControl1 的 UserControl 的 XAML。这怎么搭配?如果这真的是你的代码,它看起来真的很奇怪。将 MyLabel 属性移到 UserControl1 后面的代码中,即移到文件 UserControl1.xaml.cs 中,不要在 UserControl1.xaml 中设置 Grid 的 DataContext 属性。
【参考方案1】:
表达式
<local:UserControl1 MyLabel="Hello World"/>
要求MyLabel
是UserControl1
类的属性。
你必须声明UserControl1的类声明的属性,即在文件UserControl1.xaml.cs
中:
public partial class UserControl1 : UserControl
public UserControl1()
InitializeComponent();
public static readonly DependencyProperty MyLabelProperty =
DependencyProperty.Register(
nameof(MyLabel),
typeof(string),
typeof(UserControl1));
public string MyLabel
get return (string)GetValue(MyLabelProperty);
set SetValue(MyLabelProperty, value);
您可以通过
绑定到 UserControl 的 XAML 中的该属性<TextBlock Text="Binding MyLabel,
RelativeSource=RelativeSource AncestorType=UserControl" />
【讨论】:
以上是关于vs2008 自定义控件无法生成dll文件 c#的主要内容,如果未能解决你的问题,请参考以下文章