vs2008 自定义控件无法生成dll文件 c#

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2008 自定义控件无法生成dll文件 c#相关的知识,希望对你有一定的参考价值。

我在vs2008里自定义了一个控件,但是编译以后不仅不能在工具栏上显示,也没有看到生成的dll文件
最好能说说应该按照怎么样的顺序去自定义并使用控件
非常感谢!

一个项目只产生一个程序文件。要产生dll文件,得分成2个项目。

解决方案>项目>类

方法比较多嘛,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),而无需在后面编写任何代码。但是当我使用自定义控件时,我的自定义属性 MyLabelMainWindow.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&lt;UserControl x:Class="WpfApp1.UserControl1" ...&gt;后面的代码 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"/>

要求MyLabelUserControl1 类的属性。

你必须声明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#的主要内容,如果未能解决你的问题,请参考以下文章

vs2008时间控件设置默认值

vs2008 c#应用程序配置在哪里啊?

C# WinForm 自定义控件如何实现动态添加子控件

c# 用户自定义控件的问题 winform

ASP.NET用户自定义控件

vs中怎么样使用自定义控件