精华内容
下载资源
问答
  • VB生成RTF文档源代码,用纯VB代码编写,未使用任何第三方控件,生成RTF速度快,源代码来自国外...里面有很多.cls编程类,可用在其它的VB开发项目中,由RTF文档可扩展成复杂文本编辑器,运行效果界面如图所示。
  • CLS理解

    2007-10-14 12:40:00
    接触了很久得.NET,对CLS的理解还不是很透彻...比如说在c#中编写代码,用到VB编写类库时,那么在VB里面编写类库代码就应该要符合CLS的规范。转载一个例子说明这一点。 using System; namespace CLSsam...
      接触了很久得.NET,对CLS的理解还不是很透彻。今天又重新看了下书本及查了相关的资料。
    自己感觉对此的理解又更进了一层。
       个人认为:CLS用到的地方应该是在跨语言调用时用的比较多。比如说在c#中编写的代码,用到VB编写的类库时,那么在VB里面编写的类库代码就应该要符合CLS的规范。转载一个例子说明这一点。

    using System;

    namespace CLSsample
    {
     public class CLSTest
     {
      public CLSTest()
      {
      
      }
      public void ABC()
      {
       Console.WriteLine("ABC");
      }
     }
    }

    在VB.net中调用:
    Dim c As CLSsample.CLSTest = New CLSsample.CLSTest
    c.ABC()

    现在给dll中的CLSTest类加一个函数:
    public void abc()
    {
     Console.WriteLine("abc");
    }
    先编译C#写的这个dll,再编译VB.net工程,编译出现问题,提示信息如下:

    重载决策失败,原因是没有可访问的“ABC”最适合这些参数:
        'Public Sub abc()': 不是最适合。
        'Public Sub ABC()': 不是最适合。

       
    原因很简单,因为C#是区分大小写的,但是VB.net不区分。
    而真正的原因在于用C#写的这个类是不符合CLS(公共语言规范)的。
    现在在命名空间前面加上一句,标示编译时确保不包含其它语言无法使用的内容:
    [assembly:CLSCompliant(true)]
    namespace CLSsample
    {
       ......
       public void ABC()
      {
           Console.WriteLine("ABC");
      }
       public void abc()
      {
           Console.WriteLine("abc");
      }
    }
    这时候再编译,就会出现错误,提示信息:
    只在大小写不同的标识符“CLSsample.CLSTest.abc()”不符合 CLS

    要编译通过,在函数abc前加上:
    [CLSCompliantAttribute(false)]
    指出 abc函数 是不符合 CLS 的

    下面是MSDN中对CLS的部分说明:
    CLS 在设计上足够大,可以包括开发人员经常需要的语言构造;同时也足够小,
    大多数语言都可以支持它。此外,任何不可能快速验证代码类型安全性的语言
    构造都被排除在 CLS 之外,以便所有符合 CLS 的语言都可以生成可验证的代码
    (如果它们选择这样做)。

    也就是说开发的类库必须遵守CLS才可以更好的被其它的语言所使用。否则就像
    上面的情况,用C#开发的动态链接库在VB.net中就出现了问题,特别是开发一些
    通用的类库的时候,就更需要注意这一点。

     

    在VB.net中调用:
    Dim c As CLSsample.CLSTest = New CLSsample.CLSTest
    c.ABC()

    现在给dll中的CLSTest类加一个函数:
    public void abc()
    {
     Console.WriteLine("abc");
    }
    先编译C#写的这个dll,再编译VB.net工程,编译出现问题,提示信息如下:

    重载决策失败,原因是没有可访问的“ABC”最适合这些参数:
        'Public Sub abc()': 不是最适合。
        'Public Sub ABC()': 不是最适合。

       
    原因很简单,因为C#是区分大小写的,但是VB.net不区分。
    而真正的原因在于用C#写的这个类是不符合CLS(公共语言规范)的。
    现在在命名空间前面加上一句,标示编译时确保不包含其它语言无法使用的内容:
    [assembly:CLSCompliant(true)]
    namespace CLSsample
    {
       ......
       public void ABC()
      {
           Console.WriteLine("ABC");
      }
       public void abc()
      {
           Console.WriteLine("abc");
      }
    }
    这时候再编译,就会出现错误,提示信息:
    只在大小写不同的标识符“CLSsample.CLSTest.abc()”不符合 CLS
    相信看过这个例子之后应该都会明白CLS具体的功效。

    转载于:https://www.cnblogs.com/huangkit/archive/2007/10/14/923722.html

    展开全文
  • vb的委托学习

    2011-04-12 22:17:00
    它能够引用对象的方法(实例方法)和类的方法(静态方法、在VB里的Shared方法)。使用委托可以概括为三步:声明、实例化、调用。Public Class Class1 Shared Sub Main() Dim cls2 As New Class2 '实例化 D

    委托和事件
     
    委托,这个词一听被邪乎。几年前我还以为和律师什么的有关系。可事实上“委托”就是System.Delegate类。它是一个类,这就意味着它是一个数据类型,而且是一个引用类型。它能够引用对象的方法(实例方法)和类的方法(静态方法、在VB里的Shared方法)。
     
    使用委托可以概括为三步:声明、实例化、调用。
     
    Public Class Class1
        Shared Sub Main()
            Dim cls2 As New Class2

            '实例化
            Dim d1 As OneDelegate = AddressOf cls2.fun1

            '调用
            d1() '实际上执行fun1
            '实例化
            Dim d2 As OneDelegate = AddressOf Class2.fun2

            '调用
            d2() '实际上执行fun2
     
            Console.ReadLine()
        End Sub
    End Class
     
    '声明委托
    Delegate Sub OneDelegate()
     
    Public Class Class2
        '实例方法
        Public Sub fun1()
            Console.WriteLine("fun1")
        End Sub
     
        'shared方法
        Public Shared Sub fun2()
            Console.WriteLine("fun2")
        End Sub
    End Class
     
    这样直接调用委托没有什么意义。因为可以直接调用方法。那样更加简单。使用委托最多的其实是事件,因为事件是由委托实现的。现如今大多数程序都是事件驱动的。要使用事件必须正确作如下几件事:
     
    声明事件
    引发事件
    编写事件处理程序
    把时间处理程序和事件联系起来
     
    声明事件
     
    通常我们都是在编写某一个类的时候把事件添加给类。请看下面这段代码:
     
    Public Class class3
        '该类具有一个属性Prop。当该属性发生改变之后引发事件PropChanged
     
        '添加事件PropChanged
        Public Event PropChanged()
        '把事件添加给一个类,指定该类可以引发该事件。
        '要引发事件必须使用RaisEvent,就像下面这样。(在属性的set里面)
     
        '注意:使用事件必须注意,事件不能具有返回值、可选参数、ParamArray参数。
     
        Private _prop As String

        '参数Prop
        Public Property Prop() As String
            Get
                Return Me._prop

            End Get
            Set(ByVal Value As String)
                Me._prop = Value

                '当这个参数发生改变之后触发事件PropChanged
                RaiseEvent PropChanged()

                '这样事件就发生了。但是让这个事件发生绝对不是
                '最终的目的。人们使用事件机制,是为了在事件发生
                '的时候做点什么事情。所以,必须再使用这个类的
                '程序里写一个函数作为事件处理程序。
                '就像Class1.cls3_PropChanged(那样)
            End Set
        End Property
    End Class
     
    Public Class Class1
        Shared Sub Main()
            Dim cls2 As New Class2

            '实例化
            Dim d1 As OneDelegate = AddressOf cls2.fun1

            '调用
            d1() '实际上执行fun1

            '实例化
            Dim d2 As OneDelegate = AddressOf Class2.fun2

            '调用
            d2() '实际上执行fun2
     
            Dim cls1 As New Class1

            cls1.TestEvent()
     
            Console.ReadLine()
        End Sub
     
        '声明class3对象
        Private cls3 As class3

     
        '事件处理程序。准备用来处理对象cls3的PropChanged事件。
        '就是说,当对象cls3.Prop被改变之后,这个函数被执行。
        '这就需要把事件处理程序,也就是这个方法,和事件联系起来。
        '然后再为cls3.Prop赋值。就像TestEvent方法所作的那样。
        Private Sub cls3_PropChanged()
            '把事件和事件处理程序分开
            RemoveHandler cls3.PropChanged, _

                AddressOf Me.cls3_PropChanged

     
            Console.WriteLine("cls3_PropChanged被执行")

        End Sub
     
        Private Sub TestEvent()
            Me.cls3 = New class3

            '把事件处理程序和事件联系起来。
            AddHandler cls3.PropChanged, AddressOf Me.cls3_PropChanged

     
            '注意:
            '还有另一种把事件和事件处理程序联系起来的方法,
            '就是使用WithEvents和Handles。非常常见,所以不详述。
     
            '为属性赋值
            Me.cls3.Prop = "改变属性"

            '事件这时就发生了,事件处理程序被执行。
        End Sub
    End Class
     
    '声明委托
    Delegate Sub OneDelegate()
     
    Public Class Class2
        '实例方法
        Public Sub fun1()
            Console.WriteLine("fun1")
        End Sub
     
        'shared方法
        Public Shared Sub fun2()
            Console.WriteLine("fun2")
        End Sub
    End Class


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qisir1981/archive/2006/07/27/988514.aspx

    展开全文
  • ‘而且每个应用程序的内存区域都映射到系统内存区域里,也就是说在这里GetProcAddress得到的VB程序里LoadLibraryA函数的入口地址和 ‘notepad程序里的LoadLibraryA函数地址是一致的(映射的作用),所以不必担心....
  • VB6.exe可以将cls模块、普通模块、窗体代码frm先生存汇编代码文件,然后再继续编译,但我们看不到这些代码,是因为编译器C2.exe隐藏或删除了,为了在VB6程序可以嵌入汇编代码或C代码,就要让C2.exe将这些汇编...
  • OwnerInterface.RequestOperation OwnerClass, Text1.Text 和调用的对象通信,其实就是调用了他的方法,还请注意:onconnection 不是IAddInInterface里的方法了,而是TestAddin.Class1的onconnection。  ICommClass...
  • VB6.exe可以将cls模块、普通模块、窗体代码frm先生存汇编代码文件,然后再继续编译,但我们看不到这些代码,是因为编译器C2.exe隐藏或删除了,为了在VB6程序可以嵌入汇编代码或C代码,就要让C2.exe将这些汇编...
  • .net一个很重要特性就是跨语言编程,用C#写dll可以在VB.net调用,例如:用C#写一个类,编译到dll中,然后在VB.net中调用: usingSystem;namespaceCLSsample{publicclassCLSTest{publicCLSTest(){}...

    .net的一个很重要的特性就是跨语言的编程,用C#写的dll可以在VB.net里调用,例如:
    用C#写的一个类,编译到dll中,然后在VB.net中调用:

     

    using System;

    namespace CLSsample
    {
     
    public class CLSTest
     
    {
      
    public CLSTest()
      
    {
       
      }

      
    public void ABC()
      
    {
       Console.WriteLine(
    "ABC");
      }

     }

    }

     

    在VB.net中调用:
    Dim c As CLSsample.CLSTest = New CLSsample.CLSTest
    c.ABC()

    现在给dll中的CLSTest类加一个函数:
    public void abc()
    {
     Console.WriteLine("abc");
    }
    先编译C#写的这个dll,再编译VB.net工程,编译出现问题,提示信息如下:

    重载决策失败,原因是没有可访问的“ABC”最适合这些参数: 
        'Public Sub abc()': 不是最适合。
        'Public Sub ABC()': 不是最适合。

        
    原因很简单,因为C#是区分大小写的,但是VB.net不区分。
    而真正的原因在于用C#写的这个类是不符合CLS(公共语言规范)的。
    现在在命名空间前面加上一句,标示编译时确保不包含其它语言无法使用的内容:
    [assembly:CLSCompliant(true)]
    namespace CLSsample
    {
       ......
       public void ABC()
      {
           Console.WriteLine("ABC");
      }
       public void abc()
      {
           Console.WriteLine("abc");
      }
    }
    这时候再编译,就会出现错误,提示信息:
    只在大小写不同的标识符“CLSsample.CLSTest.abc()”不符合 CLS

    要编译通过,在函数abc前加上:
    [CLSCompliantAttribute(false)]
    指出 abc函数 是不符合 CLS 的

    下面是MSDN中对CLS的部分说明:
    CLS 在设计上足够大,可以包括开发人员经常需要的语言构造;同时也足够小,
    大多数语言都可以支持它。此外,任何不可能快速验证代码类型安全性的语言
    构造都被排除在 CLS 之外,以便所有符合 CLS 的语言都可以生成可验证的代码
    (如果它们选择这样做)。

    也就是说开发的类库必须遵守CLS才可以更好的被其它的语言所使用。否则就像
    上面的情况,用C#开发的动态链接库在VB.net中就出现了问题,特别是开发一些
    通用的类库的时候,就更需要注意这一点。

    看看对.net framework中Int32反编译的部分结果(用的是Reflector):
    [CLSCompliant(false)]
    uint System.IConvertible.ToUInt32(IFormatProvider provider);
    这是因为有的语言不支持UInt32类型。

    再看看对UInt32反编译的结果,UInt32的声明:
    [Serializable, StructLayout(LayoutKind.Sequential), CLSCompliant(false)]
    public struct UInt32 : IComparable, IFormattable, IConvertible
    {
    }

    什么是CLS? 
    “CLS是编程语言设计者和类库设计者之间的一个约定”

    转载于:https://www.cnblogs.com/zhangchenliang/archive/2012/08/29/2662395.html

    展开全文
  • VB.NET在PictureBox中绘制居中文字且不闪烁方案: 昨天做一个软件,是从VB6转到VB.NET里面。涉及到在PictureBox中绘图问题。 在VB6中,代码是这样,很简单: Sub ShowStatue(ByVal s As String) With ...

    昨天做一个软件,是从VB6转到VB.NET里面。涉及到在PictureBox中绘图的问题。

    VB6中,代码是这样的,很简单的:

    Sub ShowStatue(ByVal s As String)
        With Picture1
            .AutoRedraw = True
            .Cls
            .FontSize = 15
            .CurrentX = (.ScaleWidth - .TextWidth("文字内容")) / 2
            .CurrentY = (.ScaleHeight - .TextHeight("文字内容")) / 2
            Picture1.Print s
            .Refresh
            .AutoRedraw = False
        End With
    End Sub

    然而,我转到.NET中的时候就懵了。

    找不到AutoRedraw有木有啊!

    找不到Cls有木有啊!

    找不到FontSize有木有啊!

    找不到CurrentX有木有啊!

    找不到CurrentY有木有啊!

    找不到TextWidth有木有啊!

    找不到TextHeight有木有啊!

    怎么办?不能就这样罢了!我记得以前看到过vb和vb.net对比的文章,我试试百度下。

    于是我找到了说明,说:

    TextWidth 属性 System.Drawing.Graphics.MeasureString 方法

    于是我就立刻实验,力图找到替代TextWidth和TextHeight的方法,得到了如下代码:

    	Dim font As New Font("宋体", 12)
            Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            Dim g = Graphics.FromImage(bmp)
            Dim sizef As SizeF = g.MeasureString("文字内容", font)
    	'sizef.Height表示TextHeight的值,sizef.Width表示TextWidth的值,替代完成!

    完成了获取文字输出的实际的代码之后,就需要解决文字绘制的问题了。

    查阅百度上的相关资料,得出了下面的简单代码:

    	Dim nBrush As New SolidBrush(Color.Black)
            Dim font As New Font("宋体", 12)
            Dim g = PictureBox1.CreateGraphics
            g.Clear(PictureBox1.BackColor)
            g.DrawString("文字内容", font, nBrush,5,5)
            g = Nothing
    这个代码可以在PictureBox上面绘制出文字,而且反复绘制不会出现重叠,因为我这里的g.Clear(PictureBox1.BackColor)就是清空显示,并且恢复原来的颜色背景的。


    但是,问题是,我如果绘制的间隔很短,很频繁的时候,这个PictureBox中的文字会不停的闪烁

    于是我又查阅了很多资料,终于完成了最后的一个版本,下面贴上完整的代码:

        Sub ShowStatue(ByVal info As String)
            Dim nBrush As New SolidBrush(Color.Black)
            Dim font As New Font("宋体", 12)
            Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            Dim g = Graphics.FromImage(bmp)
            Dim left As Single
            Dim top As Single
            Dim sizef As SizeF = g.MeasureString(info, font)
            g.Clear(PictureBox1.BackColor)
            top = (PictureBox1.Height - sizef.Height) / 2
            left = (PictureBox1.Width - sizef.Width) / 2
            g.DrawString(info, font, nBrush, left, top)
            g = PictureBox1.CreateGraphics
            g.DrawImage(bmp, 0, 0)
            g = Nothing
            bmp = Nothing
        End Sub

    We Are The World,We Are The Children!

    谢谢大家浏览,您的留言将是宝贵的鼓励!

    Michael Jackson:It's All For Love


    展开全文
  • .net一个很重要特性就是跨语言编程,用C#写dll可以在VB.net调用,例如: 用C#写一个类,编译到dll中,然后在VB.net中调用:   using System; namespace CLSsampl
  • .net一个很重要特性就是跨语言编程,用C#写dll可以在VB.net调用,例如:用C#写一个类,编译到dll中,然后在VB.net中调用: 可以正常编译,但在声明一个类实例时,却提示db不是最适合cls的,db是我声明...
  • VB 控件数组画图.rar

    2019-07-10 09:37:47
    VB 控件数组画图,每次输出新图形,前面清除,可以画直线、矩形、圆。具体代码操作,请看如下:  Private Sub Form_Load()  Picture1.Scale (0, 0)-(10, 10) '设置坐标系  End Sub  Private Sub Command1_...
  • net一个很重要特性就是跨语言编程,用C#写dll可以在VB.net调用,例如:用C#写一个类,编译到dll中,然后在VB.net中调用: using System;namespace CLSsample{ public class CLSTest { public ...
  • .net一个很重要特性就是跨语言编程,用C#写dll可以在VB.net调用,例如:用C#写一个类,编译到dll中,然后在VB.net中调用: using System;namespace CLSsample{ public class CLSTest { public ...
  • .net一个很重要特性就是跨语言编程,用C#写dll可以在VB.net调用,例如:用C#写一个类,编译到dll中,然后在VB.net中调用: usingSystem;namespaceCLSsample{publicclassCLSTest{publicCLSTest(){}...
  • VB进程间通讯演示

    热门讨论 2006-03-16 00:00:00
    VB里使用内存文件映射技术需要大量使用CopyMemory,还要处理好DBCS和UNICODE关系,程序虽然已经调试通过,还需要大家一起改进。 2002年2月18日更新: 加入了用DLL共享节和VB回调函数代码,可以说 这是这...
  • 对面向对象理解更加深入了

    千次阅读 2006-08-11 23:12:00
    今天仔细看了一下一个用VBFTP客户端源代码,里面用了几个cls文件(VB类模块文件),看了过后觉得对面向对象编程思想更加深入了,确实,使用面向对象技术,大大提高了软件可读性和易用性,而且更容易...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    18.2 在 C #代码中调用 C++和 VB 编写组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • C#微软培训资料

    2014-01-22 14:10:17
    18.2 在 C #代码中调用 C++和 VB 编写组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • ' CCommonDialog.cls ' 功 能:使用 Windows 通用对话框,如下: ' 0、文件属性对话框 ' 1、打开对话框(可以提供某些文件预览) ' 2、保存对话框 ' 3、字体对话框(预览?) ' 4、颜色对话框 ' Ver 1.0.0 版本,只...
  • c#学习笔记.txt

    2008-12-15 14:01:21
    如前所述,我是一个狮子座男人,一度我认为学习Java会使我看起来与众不同,可是几个月以后我放弃了这个选择,我看了论坛关于这两种语言孰优孰劣讨论,最终选择了C#,请不要问我为何做出这样选择,很多人认为...
  • 打冰雹游戏源程序

    2013-06-16 00:07:04
    本次课程设计利用《软件设计基础-VB》课程中所学到编程知识和编程技巧,完成具有一定难度和工作量程序设计题目,帮助学生掌握编程、调试基本技能,独立完成所布置任务。 要求: 1、对系统进行功能需求分析 2...
  • 43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 答:会执行,在return前执行。 44.两个对象值相同(x.equals(y) == true),但却可有不同...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

vb里的cls