none
请教一个只能输入数字的文本框自定义控件的问题

    问题

  • 我按照书本上的代码做一个只能输入数字的文本框自定义控件,出现以下错误提示,请问如何处理,谢谢:

    为类“NumbericTextBox”指定的基类“System.Windows.Forms.TextBox”不能与它的其他分部类型之一的基类“System.Windows.Forms.UserControl”不同。

    Public Class NumbericTextBox
        Inherits System.Windows.Forms.TextBox
    
        Private Sub NumbericTextBox_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles Me.KeyPress
    
            Dim KeyAscii As Integer
            KeyAscii = Asc(e.KeyChar)
            Select Case KeyAscii
                Case 48 To 57, 8, 13 '数字0~9和空格的Ascii码值
                    '文本框接受这些字符,不做任何处理
                Case 45 '减号的Ascii码值
                    If Me.Text.IndexOf("-") > -1 Then
                        KeyAscii = 0
                    End If
                    'If Me.SelectionStart <> 0 Then
                    '    KeyAscii = 0
                    'End If
                Case 46 '小数点的Ascii码值
                    If Me.Text.IndexOf(".") > -1 Then '如果小数点已存在,则抛出
                        KeyAscii = 0
                    End If
                Case Else
                    KeyAscii = 0 '过滤掉其它字符
            End Select
    
        End Sub
    
    End Class

    2017年4月1日 13:53

答案

  • Hi,

    我已经重现你的问题了。

    问题的根源是在NumbericTextBox.Designer.vb文件里面,里面已经有了NumbericTextBox部分类,它是继承usercontrol这个类。 

    如果你在code behind那个地方,再去继承一个一个不一样的类,就会导致这个问题。 所以你不能再去继承另外一个类

    下面是截图

    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class NumbericTextBox
        Inherits System.Windows.Forms.UserControl
    
        'UserControl1 overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 leon1526 2017年4月11日 0:59
    2017年4月7日 7:54
    版主

全部回复

  • 查找看看是不是多个地方定义了
    Class NumbericTextBox

    http://feiyun0112.cnblogs.com/

    2017年4月5日 1:59
    版主
  • Hi,

    感谢在MSDN发帖。

    我这边使用你这个代码,没有出现你这个错误,你能提供一个可以重现问题的demo,到onedrive上面吗?

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月5日 2:09
    版主
  • 我检查过没有多个地方定义
    2017年4月5日 13:39
  • Hi Hart,

    首先多谢你的回复。不知为何我无法访问OneDrive,我详细描述下我的步骤吧!

    1,新建项目

    2,选择Windows窗体控件库,在名称处输入“NumbericTextBox”后点确定进入

    3,在解决方案资源管理器中将"UserControl1.vb"重命名为"NumbericTextBox.vb"

    4,添加textbox控件到窗体,

    5,输入代码,然后再“Inherits。。。”语句处就提示错误。

    2017年4月5日 13:49
  • Hi,

    >>" 2,选择Windows窗体控件库,在名称处输入“NumbericTextBox”后点确定进入 "

    这个windows窗体控件库,就是windows 窗体吗? 然后你命名为" NumbericTextBox".

    >>",在解决方案资源管理器中将"UserControl1.vb"重命名为"NumbericTextBox.vb"  "

    我做到第三步,就没有办法重命名。 提示有冲突。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月6日 7:16
    版主
  • Hi Hart,

    我将2,3,4步做了一个图片,请帮忙看下能否重复这个问题,谢谢!正确的步骤应该是怎样的?

    

    2017年4月6日 8:04
  • Hi,

    我已经重现你的问题了。

    问题的根源是在NumbericTextBox.Designer.vb文件里面,里面已经有了NumbericTextBox部分类,它是继承usercontrol这个类。 

    如果你在code behind那个地方,再去继承一个一个不一样的类,就会导致这个问题。 所以你不能再去继承另外一个类

    下面是截图

    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class NumbericTextBox
        Inherits System.Windows.Forms.UserControl
    
        'UserControl1 overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 leon1526 2017年4月11日 0:59
    2017年4月7日 7:54
    版主