精华内容
下载资源
问答
  • VB.NET自定义组件方法及注意事项

    千次阅读 2011-06-05 23:25:00
    Imports System.ComponentModelImports System.IOImports System.Windows.FormsImports YeWuBillPublic Class TwoLed Inherits System.Windows.Forms.PictureBox 切记 属性必须对其赋值,否则导致系统崩溃。...

    Imports System.ComponentModel
    Imports System.IO
    Imports System.Windows.Forms
    Imports YeWuBill


    Public Class TwoLed
        Inherits System.Windows.Forms.PictureBox

        '切记 属性必须对其赋值,否则导致系统崩溃。

        Public Enum TwoLedState
            None_Led = 0              'XF
            Right_Led = 1             'XB
            Mid_Led = 2               'XD
            Mid_Right_Led = 3         'X9
            Left_Led = 4              'XE
            Left_Right_Led = 5        'XA
            Left_Mid_Led = 6          'XC
            Left_Mid_Right_Led = 7    'X8
            Bad_Led = 8               '坏了
        End Enum

        Dim AddStated As Boolean
        Dim SaveStated As Boolean

        ''' <summary>
        ''' 灯塔号
        ''' </summary>
        ''' <remarks></remarks>

        Private mvarTitle As String = "1#灯塔"
        <Browsable(True)> _
        Public Property Title() As String
            Get
                Return mvarTitle
            End Get
            Set(ByVal value As String)
                mvarTitle = value
                Me.Invalidate()
            End Set
        End Property

        ''' <summary>
        ''' 灯塔地址
        ''' </summary>
        ''' <remarks></remarks>
        Private mvarAddress As Integer = 1
        <Browsable(True)> _
        Public Property Address() As Integer
            Get
                Return mvarAddress
            End Get
            Set(ByVal value As Integer)
                mvarAddress = value
                Me.Invalidate()
            End Set
        End Property

        ''' <summary>
        ''' 启动状态
        ''' </summary>
        ''' <remarks></remarks>
        Private mvarStartState = True
        Public Property StartState() As Boolean
            Get
                Return mvarStartState
            End Get
            Set(ByVal value As Boolean)
                mvarStartState = value
                Me.Invalidate()
            End Set
        End Property

        ''' <summary>
        ''' 灯的输入字符,表示灯的输入状态
        ''' </summary>
        ''' <remarks></remarks>
        Private mvarIOin As String = "0F"
        <Browsable(True)> _
        Public Property IOin() As String
            Get
                Return mvarIOin
            End Get
            Set(ByVal value As String)
                mvarIOin = value
            End Set
        End Property

        ''' <summary>
        ''' 灯的输出字符,表示灯的输出状态
        ''' </summary>
        ''' <remarks></remarks>
        Private mvarIOout As String = "00"
        <Browsable(True)> _
        Public Property IOout() As String
            Get
                Return mvarIOout
            End Get
            Set(ByVal value As String)
                mvarIOout = value
            End Set
        End Property

        ''' <summary>
        ''' 灯的通道数量
        ''' </summary>
        ''' <remarks></remarks>
        Private mavChannelNum As Integer = 3
        <Browsable(True)> _
        Public Property ChannelNum() As Integer
            Get
                Return mavChannelNum
            End Get
            Set(ByVal value As Integer)
                mavChannelNum = value
                Me.Invalidate()
            End Set

        End Property

        ''' <summary>
        ''' 灯塔值
        ''' </summary>
        ''' <remarks></remarks>
        Private mvarValue As TwoLedState = TwoLedState.None_Led
        Public Property LedValue() As TwoLedState
            Get
                Return mvarValue
            End Get
            Set(ByVal mValue As TwoLedState)
                mvarValue = mValue
                If mValue = 0 Then
                    Me.Image = My.Resources._0_0_0  'XF
                ElseIf mValue = 1 Then
                    Me.Image = My.Resources._0_0_1  'XB
                ElseIf mValue = 2 Then
                    Me.Image = My.Resources._0_1_0  'XD
                ElseIf mValue = 3 Then
                    Me.Image = My.Resources._0_1_1  'X9
                ElseIf mValue = 4 Then
                    Me.Image = My.Resources._1_0_0  'XE
                ElseIf mValue = 5 Then
                    Me.Image = My.Resources._1_0_1  'XA
                ElseIf mValue = 6 Then
                    Me.Image = My.Resources._1_1_0  'XC
                ElseIf mValue = 7 Then
                    Me.Image = My.Resources._1_1_1  'X08
                ElseIf mValue = 8 Then
                    Me.Image = My.Resources.x_x_x
                End If
                If mValue <> TwoLedState.None_Led And Not AddStated Then
                    AddData()
                    AddStated = True
                    SaveStated = False
                End If
                If mValue = TwoLedState.None_Led And Not SaveStated And AddStated Then
                    SaveData()
                    SaveStated = True
                    AddStated = False
                End If
                Me.Invalidate()
            End Set
        End Property

        '添加提示信息
        Private Sub TwoLed_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseHover
            Dim mTooltip As New ToolTip
            If mvarAddress > 0 Then
                mTooltip.SetToolTip(Me, "标题:" & mvarTitle.ToString & "通道号:" & mavChannelNum.ToString)
            End If
        End Sub

        'Private Sub TwoLed_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
        '    If Me.Enabled Then
        '        Dim frm As New FrmLedKZ
        '        ' frm.Text = "地址:" & Me.Address ' mvarAddress
        '        frm.TwoLed1 = Me            'me的引用最为关键呀
        '        frm.Text = Address
        '        frm.ShowDialog()
        '    Else
        '        MsgBox("系统无电或信号不正常!,请检查")
        '    End If
        'End Sub


        Private Sub MyPic_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
            Me.SizeMode = PictureBoxSizeMode.StretchImage
        End Sub


       
        Public Sub New()

            ' 此调用是 Windows 窗体设计器所必需的。
            InitializeComponent()
            Me.Image = My.Resources._0_0_0

             '此处为透明背景
            Me.BackColor = Color.Transparent
            ' 在 InitializeComponent() 调用之后添加任何初始化。

        End Sub

        Private Sub AddData()

            Dim Myfun As New ClsTbLedOpenTime
            If Myfun.ExistBy(Me.Title, 1) Then
                Myfun.ModifyOpenLedTime(Me.Title, 1)
            Else
                Myfun.AddOpenLedTime(Me.Title, 1)
            End If

            Myfun = Nothing
        End Sub


        Private Sub SaveData()
            Dim Mydata As New tbLedTimed
            Dim Myfun1 As New ClsTbLedOpenTime
            Dim Myfun As New ClsTbLedTimed
            Dim TmpDate1 As Date

            TmpDate1 = Myfun1.ReadLedOpenTime(Me.Title)

            Mydata.灯名称 = Me.Title
            Mydata.关灯时间 = Now
            Mydata.开灯时间 = TmpDate1
            Mydata.合计时间 = DateDiff(DateInterval.Minute, TmpDate1, Now)

            Myfun.AddOpenLedTime(Mydata)

        End Sub

    End Class

    展开全文
  • VB自定义的ComboBox列表框,已定义风格的列表框,支持鼠标滚轮滚动内容,彩色的ComboBox列表框,对美化窗口有一定作用。
  • VB.NET自定义类库(dll)的编写和引用的简单示例 DLL(动态链接库)是一个很有用的东西,比如说,你有一段经常要用到的代码,可以作为标准代码使用, 就可以把它封装成DLL文件,以后要用到的时候,只需要引用一下就...
  • VB6.0编写的一个自定义的Text文本框控件,实现了基本的文本加载并显示的功能,由VB代码写出的控件,不是调用VB自带的Editor控件。在编写的过程中,使用了ucText.ctl、modText.bas等类库。后续会添加代码语法高亮功能...
  • VB6.0自定义ListView的显示方式,摆脱微软控件之ListView自定义视图的例子,有多种的显示方式,可满足不同需求的需要。本示例将ListView显示的内容以“段”的方式显示,可以在每个列表项中添加图标,它的视图允许...
  • .NET自定义组件属性编辑器简单例程(ComponentDesignDemo)
  • VB自定义彩色图标的ImageList列表控件,可以支持PNG/GIF/JPG格式的图标,添加到列表中,美化列表控件,也可完成某种特定的功能。^注意^: Windows 2000或更低版本的操作系统无法支持 32bpp 的图标.
  • VB6.0自定义的数据库绑定控件,类似Data控件,打造自己的数据库帮定控件,类似于data控件,把一个文件夹里面的所有文件绑定到空间,然后其他的控件可以用。是不是很有用啊,值得参考。下载后,请参考源码包中的User...
  • 一个用VB实现的TreeView菜单,一个自定义的ItemTree树控菜单,可应用于多种VB窗体环境中。而且支持无限级节点哦,这个相当不错,内容节点比较多的时候,用这个控件很爽。
  • vb水印组件

    2013-12-05 20:28:42
    2、输出JPG格式缩略图,自定义输出压缩参数 3、高效率生成缩略图,4种导出方式,方便灵活。 4、图片裁减功能,自定义裁减区域。 5、能够获取图片尺寸。 6、支持文字水印透明度、阴影及阴影模糊,自定义字体、颜色、...
  • I . 视图绑定 ( ViewBinding ) 界面的两种方式 II . Activity 界面中 应用 视图绑定 ( ... 自定义组件 应用 视图绑定 ( ViewBinding ) V . RecyclerView 列表布局 应用 视图绑定 ( ViewBinding ) VI . GitHub 代码地址



    I . 视图绑定 ( ViewBinding ) 界面的两种方式



    1 . ViewBinding 视图绑定类提供了两种与界面的绑定方式 , 分别是

    XxxBinding.inflate( LayoutInflater )

    XxxBinding.inflate( LayoutInflater , ViewParent, attachToRoot )

    两种方式 ; ( XxxBinding 是视图绑定类 )


    2 . XxxBinding.inflate( LayoutInflater ) 与界面绑定 : 这种方式加载的布局与界面关联性不大 , 需要调用额外的函数 , 将视图绑定类与界面进行绑定 , Activity 界面 与 Dialog 对话框 , 就使用这种绑定方式 ;


    3 . XxxBinding.inflate( LayoutInflater , ViewParent, attachToRoot ) 直接与界面绑定 : 自定义布局组件 和 RecyclerView 适配器中为条目加载布局选项 , 就是使用的这种方式 , 调用该方法后 , 可以直接与界面进行绑定 , 界面中显示的就是 XxxBinding 对应的布局内容 ;



    II . Activity 界面中 应用 视图绑定 ( ViewBinding )



    Activity 界面中 应用 视图绑定 ( ViewBinding ) :


    ① 获取视图绑定类 : 使用 ActivityMainBinding.inflate(getLayoutInflater()) 只是单纯的加载布局 ;

    ② 关联界面 : 还需要调用 setContentView(binding.getRoot()) 方法 , 将 视图绑定类与 Activity 界面关联 , 此时才能通过视图绑定类获取组件 , 进而控制 UI 界面 ;


    public class MainActivity extends AppCompatActivity {
    
        /**
         * 视图绑定类 对象
         */
        private ActivityMainBinding binding;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // 1 . 获取视图绑定类
            binding = ActivityMainBinding.inflate(getLayoutInflater());
    
            // 2 . 关联视图绑定类 与 Activity
            setContentView(binding.getRoot());
    
            // 3 . 使用视图绑定类设置
            binding.textView.setText("视图绑定 ( ViewBinding ) 示例");
    
            // 4 . 视同视图绑定类获取按钮 , 并未按钮设置点击事件
            binding.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ViewBindingDialog dialog = new ViewBindingDialog(MainActivity.this);
                    dialog.show();
                }
            });
    
    
            // 5 . 设置 Recycler View
    
            // 5.1  为 RecyclerView 列表设置布局管理器
            LinearLayoutManager layoutManager = new LinearLayoutManager(this);
            layoutManager.setOrientation(RecyclerView.VERTICAL);
            binding.recyclerView.setLayoutManager(layoutManager);
    
            // 5.2 为 RecyclerView 列表设置适配器
            binding.recyclerView.setAdapter(new Adapter());
        }
    }
    


    III . Dialog 对话框界面中 应用 视图绑定 ( ViewBinding )



    Dialog 对话框界面中 应用 视图绑定 ( ViewBinding ) : 该界面与 Activity 界面用法基本相同 ;


    ① 获取视图绑定类 : 使用 DialogBinding binding = DialogBinding.inflate(getLayoutInflater()) 只是单纯的加载布局 ;

    ② 关联界面 : 还需要调用 setContentView(binding.getRoot()) 方法 , 将 视图绑定类与 Dialog 对话框界面关联 , 此时才能通过视图绑定类获取组件 , 进而控制 UI 界面 ;

    package kim.hsl.vb;
    
    import android.app.Dialog;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.Window;
    import android.view.WindowManager;
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.recyclerview.widget.RecyclerView;
    
    import kim.hsl.vb.databinding.DialogBinding;
    
    public class ViewBindingDialog extends Dialog {
    
        public ViewBindingDialog(@NonNull Context context) {
            super(context);
        }
    
        public ViewBindingDialog(@NonNull Context context, int themeResId) {
            super(context, themeResId);
        }
    
        protected ViewBindingDialog(@NonNull Context context, boolean cancelable,
                                    @Nullable OnCancelListener cancelListener) {
            super(context, cancelable, cancelListener);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // 1 . 获取视图绑定类
            DialogBinding binding = DialogBinding.inflate(getLayoutInflater());
    
            // 2 . 设置对话框布局
            setContentView(binding.getRoot());
    
            // 3 . 通过视图绑定类访问布局中的视图组件
            binding.textView.setText("视图绑定对话框示例 \nDialogBinding");
    
            // 4 . 设置对话框大小 ( 仅做参考 美观处理 与主题无关 )
            WindowManager.LayoutParams params = getWindow().getAttributes();
            params.width = WindowManager.LayoutParams.MATCH_PARENT;
            params.height = 400;
            getWindow().setAttributes(params);
        }   
    }
    

    效果展示 :

    在这里插入图片描述



    IV . 自定义组件 应用 视图绑定 ( ViewBinding )



    自定义组件 应用 视图绑定 ( ViewBinding ) :


    ① 自定义组件首先是 ViewGroup 子类 , View 子类无法使用视图绑定 ;

    ② 初始化视图绑定类并关联界面 : 使用 MyViewBinding binding = MyViewBinding.inflate(inflater, this, true) 进行视图绑定初始化 , 及 关联界面操作 , 其中的 this 就是 ViewGroup 类型的 , 即组件本身 , 调用上述方法 , 可以将两个操作都完成 ;


    package kim.hsl.vb;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.os.Build;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.LinearLayout;
    
    import androidx.annotation.Nullable;
    import androidx.annotation.RequiresApi;
    
    import kim.hsl.vb.databinding.MyViewBinding;
    
    public class ViewBindingView extends LinearLayout {
    
        /**
         * 在代码中创建组件调用该构造函数
         * @param context
         */
        public ViewBindingView(Context context) {
            super(context);
        }
    
        /**
         * 在 xml 布局文件中使用该组件 , 并且还定义了自定义属性 , 调用该构造函数
         * @param context
         * @param attrs
         */
        public ViewBindingView(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
    
            // 1 . 获取布局加载器
            LayoutInflater inflater = LayoutInflater.from(this.getContext());
    
            // 2 . 获取视图绑定类
            //     需要将视图绑定类 与 本自定义 LinearLayout 进行关联
            MyViewBinding binding = MyViewBinding.inflate(inflater, this, true);
    
            // 3 . 通过视图绑定类访问布局中的 TextView 布局
            binding.textView.setText("视图绑定自定义组件示例\nMyViewBinding");
    
        }
    
        public ViewBindingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        public ViewBindingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            //绘制黄色背景
            canvas.drawColor(Color.YELLOW);
    
        }
    }
    


    V . RecyclerView 列表布局 应用 视图绑定 ( ViewBinding )



    RecyclerView 列表布局 应用 视图绑定 ( ViewBinding ) :


    ① 视图绑定需要在 Adapter 适配器的 onCreateViewHolder( ) 方法中进行初始化 , 只有在这里才能拿到 ViewGroup parent 关联组件的父类容器 ;

    ② 初始化视图绑定类并关联界面 : 使用 ItemBinding binding = ItemBinding.inflate(LayoutInflater.from(MainActivity.this) , parent, false) 进行视图绑定初始化 , 及 关联界面操作 , 其中的 this 就是 ViewGroup 类型的 , 即组件本身 , 调用上述方法 , 可以将两个操作都完成 ;

    ③ 自定义 ViewHolder 构造函数 : public ViewHolder(ItemBinding binding) 传入视图绑定类 , 在构造函数中使用视图绑定类初始化 ViewHolder 中的组件 , 注意别忘了先调用父类的方法 ;


        class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{
    
            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                ItemBinding binding = ItemBinding.inflate(LayoutInflater.from(MainActivity.this) , parent, false);
                return new ViewHolder(binding);
            }
    
            @Override
            public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
                holder.textView.setText("第 " + position + " 行");
                if(position % 2 == 0){
                    holder.textView.setBackgroundColor(Color.YELLOW);
                }else{
                    holder.textView.setBackgroundColor(Color.WHITE);
                }
            }
    
            @Override
            public int getItemCount() {
                return 10;
            }
    
            class ViewHolder extends RecyclerView.ViewHolder{
    
                TextView textView;
    
                /**
                 * 自定义的构造函数 , 需要传入 视图绑定类
                 * @param binding
                 *            列表项布局的视图绑定类
                 */
                public ViewHolder(ItemBinding binding) {
                    super(binding.getRoot());
                    this.textView = binding.textView;
                }
            }
        }
    
    

    效果展示 :

    在这里插入图片描述



    VI . GitHub 代码地址



    GitHub 代码地址 : https://github.com/han1202012/001_JetPack_ViewBinding

    展开全文
  • 在《VB.NET学习笔记:WinForm自定义DataGridView分页组合控件》博文中,调用分页控件的窗体与分页控件同在一个项目里。笔者从《一种正确调用自定义控件的方法》博文中查询得知,这种调用自定义控件的方法在项目调试...

    测试环境:windows 7和Microsoft Visual Studio 2015
    点击下载本文资源

    在《VB.NET学习笔记:WinForm自定义DataGridView分页组合控件》博文中,调用分页控件的窗体与分页控件同在一个项目里。笔者从《一种正确调用自定义控件的方法》博文中查询得知,这种调用自定义控件的方法在项目调试或生成时可能会出现如图所示的错误。
    错误的自定义控件调用方法
    不正确的调用自定义控件会出错
    出错的原因可能是:调试或生成项目时,你无法确定自定义控件和窗体的生成顺序,若先生成窗体,再生成自定义控件,生成窗体时,窗体中所引用的自定义控件还未生成,因此造成错误。
    为防止出错,必须确保自定义控件生成顺序先于调用自定义控件的窗体。所以应该把自定义控件与窗体分隔为两个项目,其中自定义控件所在的项目不再是生成一个应用程序,而是生成类库供其它项目调用。
    操作步骤如下:
    一、新建一个Windows窗体应用程序项目。
    新建项目
    然后保存项目,记得勾选“创建解决方案的目录”。
    保存项目
    在解决方案资源管理器窗口中右键单击“解决方案"WinPager"”,添加现有项目。
    添加分页控件所在的项目
    找到分页控件源文件所在的文件夹,添加后缀名为.vbproj的项目文件DataGridViewPage.vbproj。
    添加DataGridViewPage.vbproj文件
    疑难技巧:如果解决方案资源管理器窗口中没有显示上面图中的解决方案的话,可单击菜单栏“工具”——“选项”,在弹出的“选项”窗口中左侧选择“项目和解决方案”,然后在右侧勾选“总是显示解决方案”选项,最后点“确定”。如下2图所示。
    工具-选项
    显示解决方案
    二、相关设置
    1、设置DataGridViewPage项目属性:右键单击DataGridViewPage项目名,右键菜单里选“属性”,然后设置 “应用程序类型”为“类库”,“启动对象”设置为“无”,因要生成DLL文件,所以该项目下的“Form1.vb”窗体可以删除。
    然后“重新生成”DataGridViewPage项目,会在项目目录下bin文件夹里子文件夹Debug中生成一个dll文件。操作如下图所示。
    重新生成DLL
    2、添加引用:虽然把DataGridViewPage项目和WinPager项目放到了同一个解决方案里,但他们之间依然没有必然关系,项目WinPager必须引用DataGridViewPage项目里生成的dll文件才能建立相互关系。
    操作如下图所示:右键单击项目WinPager名称,弹出的右键菜单里点“添加”——“引用”
    添加引用DLL
    在弹出的“引用管理器”中点“浏览”,然后在弹出的“选择要引用的文件”窗口里选择到DataGridViewPage项目目录下bin文件夹里子文件夹Debug中的DataGridViewPage.dll文件,点添加,再点确定,OK了。如下图所示操作。
    引用DLL
    引用成功后就可以在“解决方案资源管理器”中看到WinPager项目中的引用里多了个引用DataGridViewPage。如下图所示。
    在这里插入图片描述
    3、设置依赖项:为确保自定义控件生成顺序先于调用自定义控件的窗体,可以为解决方案设置依赖项。
    如下图操作:右键单击“解决方案”名称,弹出的菜单里点“项目依赖项”。
    在这里插入图片描述
    在弹出的“项目依赖项”窗口里,“项目”选择“WinPager”,“依赖于”勾选“DataGridViewPage”,然后点确定。如下图所示。
    在这里插入图片描述
    在“项目依赖项”中点击“生成顺序”,即可看到分页控件“DataGridViewPage”项目生成先于“WinPager”项目。如下图所示:
    生成顺序
    4、设置启动项目:右键单击解决方案名称,弹出的右键菜单里点“属性”。如下图。
    启动项
    在弹出的“解决方案属性页”窗口中,点选“单启动项目”并选择WinPager项目为启动项目。如下图。
    解决方案属性页
    此时打开WinPager项目中的Form1窗体,在工具箱中会发现DataGridViewPage项目中的DataGridViewPaging控件,如下图所示。如果没有看到则需要生成一下项目。
    控件
    如果工具箱中还是没有看到DataGridViewPaging控件,你可以按以下方法添加自定义控件到工具箱中。
    在“工具箱”窗口中任意位置右键单击,在弹出的右键菜单里点“选择项”。如下图。
    选择项
    在弹出的“选择工具箱项”窗口中,点“.NET Framework组件”——“浏览”。
    添加组件
    在“打开”窗口中选择到DataGridViewPage项目目录下bin文件夹里子文件夹Debug中的DataGridViewPage.dll文件,点“打开”即可,如下图。现在应该在工具箱中可以看到我们自定义的控件DataGridViewPaging控件了。
    在这里插入图片描述
    此刻,Winform调用自定义控件的环境已然搭配完成,你可以在DataGridViewPage项目直接修改自定义控件,修改结果可直接反映到调用的WinPager项目中。为方便管理,建议把同一解决方案中的全部项目放在同一文件夹中。

    展开全文
  • 摘要:VB源码,控件组件,ListView 运行环境:Windows/VB6
  • 收藏一个VB专用的,可自定义参数的创建桌面快捷方式的模块,使用了WSH对象,调用方法也相当简单,下面说一下各参数说明: LnkName = 快捷方式文件名,如果无路径则自动新建到桌面;无后缀名(.lnk)会自动补齐. FilePath...
  • C#的ListView添加各种自定义控件,CheckBox,ComboBox等
  • VB写的时间控件源码 time.ocx文件,time(时间控件).ocx,相当单一的控件,或许还比较粗糙,不过第一次写鼓励一下吧,控制效果如上图。
  • 帮助你理清楚大量的VB模块代码之间的逻辑关系! 本程序还处在开发阶段,源码在博主的GIthub主页上也有。 最终目标是实现一个以稳态形式存在的编译器!
  • VB抛弃WinSock.ocx的自定义控件,改自CSocketMaster 1.3,把三个文件集成为一个。程序原型是一个聊天程序雏形,一个服务端的程序,主要是为了演示如何代替WinSock.ocx,供感兴趣的朋友参考。
  • VB.NET做的一个WPF的Demo,做了个控件。像是Windows图标一样.图片加文字,移动到图片上,图片会放大。这个demo也说明了如何建立一个自定义的属性,并把UserControl中的控件属性绑定到自己定义的属性中。
  • 如何在DataGridView中加入自定义组件

    千次阅读 2011-04-15 19:04:00
    我想在DataGridView编辑时显示如下图控件: <br />  (1)创建一个自定义组件UserControl,并继承IDataGridViewEditingControl接口(用意:在DataGridView进入编辑状态时可以调用该控件),添加如下代码:...

    我想在DataGridView编辑时显示如下图控件:

     

    (1)创建一个自定义组件UserControl,并继承IDataGridViewEditingControl接口(用意:在DataGridView进入编辑状态时可以调用该控件),添加如下代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Text;
    using System.Windows.Forms;

    namespace Class.baseSys.controlSys
    {

        public partial class UserControl1 : UserControl, IDataGridViewEditingControl
        {
            int rowIndex;
            DataGridView dataGridView;
            private bool valueChanged = false; 

            public UserControl1()
            {
               
                InitializeComponent();
            }

            /// <summary> 
            /// 更改控件的用户界面 (UI),使之与指定单元格样式一致。 
            /// </summary> 
            /// <param name="dataGridViewCellStyle">要用作用户界面的模型的 System.Windows.Forms.DataGridViewCellStyle。</param> 
            public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
            {
                this.Font = dataGridViewCellStyle.Font;
                this.textBox1.ForeColor = dataGridViewCellStyle.ForeColor;
                this.textBox1.BackColor = dataGridViewCellStyle.BackColor;
            }


            /// <summary> 
            /// 确定指定的键是应由编辑控件处理的常规输入键,还是应由 System.Windows.Forms.DataGridView 处理的特殊键。 
            /// </summary> 
            /// <param name="key">一个 System.Windows.Forms.Keys,表示按下的键。</param> 
            /// <param name="dataGridViewWantsInputKey">当 System.Windows.Forms.DataGridView 要处理 keyData 中的 System.Windows.Forms.Keys时,则为 true;否则为 false。</param> 
            /// <returns>如果指定的键是应由编辑控件处理的常规输入键,则为 true;否则为 false。</returns> 
            public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
            {
                switch (keyData & Keys.KeyCode)     //设置方向键等都不令其进入编辑状态
                {
                    case Keys.Left:
                    case Keys.Up:
                    case Keys.Down:
                    case Keys.Right:
                    case Keys.Home:
                    case Keys.End:
                    case Keys.PageDown:
                    case Keys.PageUp:
                        return true;
                    default:
                        return false;
                } 
            }

            /// <summary> 
            /// 检索单元格的格式化值。 
            /// </summary> 
            /// <param name="context">System.Windows.Forms.DataGridViewDataErrorContexts 值的按位组合,它指定需要数据的上下文。</param> 
            /// <returns>一个 System.Object,表示单元格内容的格式化版本。</returns> 
            public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
            {
                return EditingControlFormattedValue;
            }

            /// <summary> 
            /// 准备当前选中的单元格以进行编辑。 
            /// </summary> 
            /// <param name="selectAll">为 true,则选择单元格的全部内容;否则为 false。</param> 
            public void PrepareEditingControlForEdit(bool selectAll)
            {
               
            }

            /// <summary> 
            /// 获取或设置包含单元格的 System.Windows.Forms.DataGridView。 
            /// </summary> 
            public DataGridView EditingControlDataGridView
            {
                get
                {
                    return dataGridView;
                }
                set
                {
                    dataGridView = value;
                } 
            }

            /// <summary> 
            /// 实现接口 IDataGridViewEditingControl.EditingControlFormattedValue  
            /// </summary> 
            public object EditingControlFormattedValue
            {
                get { return this.textBox1.Text;}
                set { this.textBox1.Text = value.ToString(); }
            }

            /// <summary>
            /// 增加属性设置TextBox的值
            /// </summary>
            public String tetText
            {
                get { return this.textBox1.Text; }
                set { this.textBox1.Text = value.ToString(); }
            }

            /// <summary> 
            /// 获取或设置该承载单元格的父行的索引。包含该单元格的行的索引,如果没有父行,则为 -1。 
            /// </summary> 
            public int EditingControlRowIndex
            {
                get
                {
                   
                    return rowIndex;
                }
                set
                {
                    rowIndex = value;
                } 
            }


            /// <summary> 
            /// 获取或设置一个值,该值指示编辑控件的值是否与承载单元格的值不同。 
            /// </summary> 
            public bool EditingControlValueChanged
            {
                get
                {
                    return valueChanged;
                }
                set
                {
                    valueChanged = value;
                }
            }

            /// <summary> 
            /// 获取当鼠标指针位于 System.Windows.Forms.DataGridView.EditingPanel 上方但不位于编辑控件上方时所使用的光标。 
            /// </summary> 
            public Cursor EditingPanelCursor
            {
                get
                {
                    return base.Cursor;
                }
            }

            /// <summary> 
            /// 获取或设置一个值,该值指示每当值更改时,是否需要重新定位单元格的内容。 
            /// </summary> 
            public bool RepositionEditingControlOnValueChange
            {
                get
                {
                    return false;
                }
            }

            /// <summary> 
            /// 修改TextBox值时通知datagridviewCell.
            /// </summary> 
            /// <param name="eventargs"></param> 
            private void textBox1_TextChanged(object sender, EventArgs e)
            {

                //DataGridView中Cell的Changed事件  
                valueChanged = true; 
                this.EditingControlDataGridView.NotifyCurrentCellDirty(true); 
           
            } 

           
        }
    }

     

    (2)增加控新地DataGridViewCell控件,使期在编辑时调用自定义组件

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;

    namespace Class.baseSys.controlSys
    {
        /// <summary> 
        /// 选择输入控件
        /// </summary> 
        public class CalendarColumn : DataGridViewColumn 
        { 
            public CalendarColumn() : base(new CalendarCell()) 
            { 
            } 
            /// <summary> 
            /// 获取或设置用于创建新单元格的模板。 
            /// </summary> 
            public override DataGridViewCell CellTemplate 
            { 
                get 
                { 
                    return base.CellTemplate; 
                } 
                set 
                { 
                    //确认单元格使用了自定义的日期单元格模版 
                    if (value != null && !value.GetType().IsAssignableFrom(typeof(TetInputCell))) 
                    { 
                        throw new InvalidCastException(/*Class.Properties.Resources.Message*/); 
                    } 
                    base.CellTemplate = value; 
                } 
            } 
        } 
        /// <summary> 
        /// 日期单元格 
        /// </summary> 
        public class TetInputCell : DataGridViewTextBoxCell
        {
            public TetInputCell()
                : base()
            {
                // 默认为短日期型 
                //this.Style.Format = "c";
            }
            /// <summary> 
            /// 初始化用于编辑单元格的控件。 
            /// </summary> 
            /// <param name="rowIndex">单元格所在位置的从零开始的行索引。</param> 
            /// <param name="initialFormattedValue">它表示在开始编辑时单元格显示的值。</param> 
            /// <param name="dataGridViewCellStyle">表示单元格样式的 System.Windows.Forms.DataGridViewCellStyle。</param> 
            public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
            {
               
                //初始化之后设置编辑状态的值 
                base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);

                UserControl1 ctl = (UserControl1)DataGridView.EditingControl;
                //Value = "111";
                if (Value != null && Value != System.DBNull.Value)
                    ctl.tetText = this.Value.ToString();
            }
            /// <summary> 
            /// 获取单元格的寄宿编辑控件的类型。 
            /// </summary> 
            public override Type EditType
            {
                get
                {
                    return typeof(UserControl1);
                }
            }
            /// <summary> 
            /// 获取或设置单元格中值的数据类型。 
            /// </summary> 
            public override Type ValueType
            {
                get
                {
                    return typeof(String);
                }
            }
            /// <summary> 
            /// 获取新记录所在行中单元格的默认值。 
            /// </summary> 
            public override object DefaultNewRowValue
            {
                get
                {
                    return "";
                }
            }
        }

    }

    (3)程序调用

    CustormerDgv dgView = null;

    展开全文
  • 在ASP.NET里动态添加自定义控件(ascx),按了Button控件,会消失;虽然用LoadControl放在IsPostBack外面,可以解决消失问题,但是要按2次Button,提交2次,才能把ascx里的数据提交出去。 经过网上搜索,找到最终...
  • Vb版windows 7风格日历选择组件,内置有多种风格,包括windows经典风格、vista风格、windows XP风格和其它自定义风格等。
  • JavaServer Faces(JSF)提供可扩展的组件模型,开发人员可以创建可重用的组件,使用这些自定义组件提高开发效率和降低开发成本。虽然对于定制和重用而言 JSF 的组件模型非常强大,但是开发人员普遍认为开发 JSF ...
  • 代码写到一个新项(类、组件自定义控件,具体用哪个自己尝试一下),按照设置属性(水印文字WaterText、水印颜色WaterColor和水印字体WaterFont——建立消息机制(重写WndProc方法)——绘制水印(DrawWaterText...
  • 1.自定义属性 Private strApplicationName As String = String.Empty Public Property ApplicationName() As String Get Return strApplicationName End Get Set(ByVal value As String) strA
  • 我想在另外一个项目中引用如图其中这些组件,他们都在一个解决方案中,只有一个vb文件 怎么引用啊,又不是dll[face]monkey:0.gif[/face][face]monkey:0.gif[/face][img=...[/img]
  • 使用VB.NET的五个技巧

    2021-03-05 07:17:28
    .NET框架组件太大了,比任何以前所写的封装功能的库都要大。这样有好处,因为它大幅削减了建立应用程序所需编写的代码,但是也使我们不可能完全了解该框架组件。但是我们很容易从中找到一些技巧。 窗体嵌套 经验...
  • 上面的代码是读取属性用的(其实我做自定义控件是看着别人的原代码学的,并非老师教的,所以有一些具体的也不清楚,只知道要这样用就是了。)  然后再加上写入属性的代码:  Private Sub UserControl_...
  • VB.NET】自定义控件(一)属性说明 Bindable 布尔型,为true时表示VS.NET将在数据绑定对话框中显示该控件  Browsable 布尔型,表示该控件是否在设计视图中显示?  Category 当...
  • 好用的 表格控件,vb6.0

    热门讨论 2011-12-20 10:01:10
    好用的表格控件。在使用中有很好的稳定性,不用注册即可使用。功能很强大,很好用,有良好的操作界面。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,878
精华内容 5,551
关键字:

vb自定义组件