有人能帮我看一下这两个一摸一样的代码怎么一个能通过一个不能么

menghuidaoxiang 2018-02-27 11:07:13
这次我以前发的帖子:
http://bbs.csdn.net/topics/392322902
电脑B系统已经重装过多次,包括windows10专业版和家庭版都试过,VS2017也重装过多次,包括各个版本,也试过VS2015了,均不能通过,在另一个电脑上A(VS2017)创建的,在这个电脑B上能运行,但不能有一点改动,改动则报错。在电脑B上创建的,在电脑A上不能通过运行,当然电脑B也是通不过

两个电脑创建的程序百度共享连接:
https://pan.baidu.com/s/1nwO7SFJ
https://pan.baidu.com/s/1eT1fBoA

...全文
1019 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
raynors 2018-03-06
  • 打赏
  • 举报
回复
原因找到了 主要是 你期望执行顺序是 Form1_Load ->setTag->Form1_Resize->setControls 而这个程序实际执行顺序是Form1_Resize->setControls->Form1_Load ->setTag 原因嘛,你绝对想不到,哈哈。 你两台电脑的DPI 设置不一样。 有个隐藏属性,叫AutoScaleDimensions 这玩意儿是根据电脑当前DPI自动生成的,在 Form1.Designer.vb 文件里面。 你从正常电脑拷出来的时候,设置是正常的,但一旦你对窗体进行操作,那么AutoScaleDimensions 就变了。 AutoScaleDimensions变了导致的结果就是 窗体会在LOAD以前自适应DPI设置,所以先行触发resize事件。
menghuidaoxiang 2018-03-06
  • 打赏
  • 举报
回复
[quote=引用 18 楼 raynors 的回复:] load 和 resize 按原来的程序意思,是一定要先LOAD 然后再RESIZE。 也就是先setTag 获得原来的大小,然后再在resize的过程中 设置新的大小 setControls 你的错误就在于没有获得原来的大小的时候就试图 去设置新的大小。 有很多办法可以解决。 简单粗暴的办法,就是给 setControls 做个错误陷阱。

    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        '得到现在窗体的大小,然后根据原始大小计算缩放比例
        Dim newx As Single = Me.Width / x
        Dim newy As Single = Me.Height / y
        Try
            setControls(newx, newy, Me)
        Catch ex As Exception

        End Try
    End Sub
谢谢你,虽然我没明白这个 Try setControls(newx, newy, Me) Catch ex As Exception End Try 为什么是一个错误陷阱,但其他的我都明白了,我只知道Try.....catch ....end try 是一个如果出现错误,就显示运行catch后面的正确语句,原来还有这个用处...再次感谢
menghuidaoxiang 2018-03-06
  • 打赏
  • 举报
回复
引用 15 楼 menghuidaoxiang 的回复:
[quote=引用 14 楼 menghuidaoxiang 的回复:] [quote=引用 13 楼 menghuidaoxiang 的回复:] [quote=引用 12 楼 raynors 的回复:] 我的意思是,你在这条语句 设个断点 把鼠标移到CON 上面,上面显示的是什么你就数说出来。 你出错的时候,也差不多是个样子。 这条是遍历 obj.Controls,也就是 当前窗口所有的控件 如果显示的是Nothing就根我的判断是一致的。 那么你就要知道这个Nothing从那里来的。

  Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
        For Each con As Control In obj.Controls
如果显示的不是Nothing 你就看它到底是个什么鬼东西。 你给的代码我在我两台电脑上都没有问题。
[/quote] 里面的所有显示Nothing的地方我都截图了,有五个地方,传不上来,只有通过网盘,帮忙看一下,谢谢,最后的那张截图确实显示的tag nothing https://pan.baidu.com/s/1dpcJWq[/quote] 错误的newx 居然无穷大,而能正确运行的数值只有0.663333356 错误的con.Created显示False(什么意思?怎么控件没创建的意思?),而能正确运行的true[/quote] 调用栈不一样 正确运行的没有 WindowsApp5.exe!WindowsApp5.Form1.New() 行 3 Basic 已加载符号。
引用 16 楼 raynors 的回复:
原因找到了 主要是 你期望执行顺序是 Form1_Load ->setTag->Form1_Resize->setControls 而这个程序实际执行顺序是Form1_Resize->setControls->Form1_Load ->setTag 原因嘛,你绝对想不到,哈哈。 你两台电脑的DPI 设置不一样。 有个隐藏属性,叫AutoScaleDimensions 这玩意儿是根据电脑当前DPI自动生成的,在 Form1.Designer.vb 文件里面。 你从正常电脑拷出来的时候,设置是正常的,但一旦你对窗体进行操作,那么AutoScaleDimensions 就变了。 AutoScaleDimensions变了导致的结果就是 窗体会在LOAD以前自适应DPI设置,所以先行触发resize事件。
饿,这么回事的啊,仙人板板的,我一度怀疑系统坏了,然后又是电脑硬件问题....那该怎么改呢,难道这个电脑不能用这个代码么,对了,昨天还有一条消息没发出来,就是正确运行的和错误运行的程序运行的调用栈不一样: 正确运行的没有 WindowsApp5.exe!WindowsApp5.Form1.New() 行 3 Basic 已加载符号。 调用栈不一样 正确运行的没有 WindowsApp5.exe!WindowsApp5.Form1.New() 行 3 Basic 已加载符号。 第三行语句是:Dim y As Single = 0 有办法改进么,谢谢
raynors 2018-03-06
  • 打赏
  • 举报
回复
load 和 resize 按原来的程序意思,是一定要先LOAD 然后再RESIZE。 也就是先setTag 获得原来的大小,然后再在resize的过程中 设置新的大小 setControls 你的错误就在于没有获得原来的大小的时候就试图 去设置新的大小。 有很多办法可以解决。 简单粗暴的办法,就是给 setControls 做个错误陷阱。

    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        '得到现在窗体的大小,然后根据原始大小计算缩放比例
        Dim newx As Single = Me.Width / x
        Dim newy As Single = Me.Height / y
        Try
            setControls(newx, newy, Me)
        Catch ex As Exception

        End Try
    End Sub
menghuidaoxiang 2018-03-05
  • 打赏
  • 举报
回复
引用 14 楼 menghuidaoxiang 的回复:
[quote=引用 13 楼 menghuidaoxiang 的回复:] [quote=引用 12 楼 raynors 的回复:] 我的意思是,你在这条语句 设个断点 把鼠标移到CON 上面,上面显示的是什么你就数说出来。 你出错的时候,也差不多是个样子。 这条是遍历 obj.Controls,也就是 当前窗口所有的控件 如果显示的是Nothing就根我的判断是一致的。 那么你就要知道这个Nothing从那里来的。

  Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
        For Each con As Control In obj.Controls
如果显示的不是Nothing 你就看它到底是个什么鬼东西。 你给的代码我在我两台电脑上都没有问题。
[/quote] 里面的所有显示Nothing的地方我都截图了,有五个地方,传不上来,只有通过网盘,帮忙看一下,谢谢,最后的那张截图确实显示的tag nothing https://pan.baidu.com/s/1dpcJWq[/quote] 错误的newx 居然无穷大,而能正确运行的数值只有0.663333356 错误的con.Created显示False(什么意思?怎么控件没创建的意思?),而能正确运行的true
menghuidaoxiang 2018-03-04
  • 打赏
  • 举报
回复
引用 13 楼 menghuidaoxiang 的回复:
[quote=引用 12 楼 raynors 的回复:] 我的意思是,你在这条语句 设个断点 把鼠标移到CON 上面,上面显示的是什么你就数说出来。 你出错的时候,也差不多是个样子。 这条是遍历 obj.Controls,也就是 当前窗口所有的控件 如果显示的是Nothing就根我的判断是一致的。 那么你就要知道这个Nothing从那里来的。

  Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
        For Each con As Control In obj.Controls
如果显示的不是Nothing 你就看它到底是个什么鬼东西。 你给的代码我在我两台电脑上都没有问题。
[/quote] 里面的所有显示Nothing的地方我都截图了,有五个地方,传不上来,只有通过网盘,帮忙看一下,谢谢,最后的那张截图确实显示的tag nothing https://pan.baidu.com/s/1dpcJWq
menghuidaoxiang 2018-03-04
  • 打赏
  • 举报
回复
引用 12 楼 raynors 的回复:
我的意思是,你在这条语句 设个断点 把鼠标移到CON 上面,上面显示的是什么你就数说出来。 你出错的时候,也差不多是个样子。 这条是遍历 obj.Controls,也就是 当前窗口所有的控件 如果显示的是Nothing就根我的判断是一致的。 那么你就要知道这个Nothing从那里来的。

  Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
        For Each con As Control In obj.Controls
如果显示的不是Nothing 你就看它到底是个什么鬼东西。 你给的代码我在我两台电脑上都没有问题。
raynors 2018-03-04
  • 打赏
  • 举报
回复
我的意思是,你在这条语句 设个断点
把鼠标移到CON 上面,上面显示的是什么你就数说出来。



你出错的时候,也差不多是个样子。

这条是遍历 obj.Controls,也就是 当前窗口所有的控件

如果显示的是Nothing就根我的判断是一致的。

那么你就要知道这个Nothing从那里来的。


Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
For Each con As Control In obj.Controls


如果显示的不是Nothing 你就看它到底是个什么鬼东西。

你给的代码我在我两台电脑上都没有问题。
menghuidaoxiang 2018-03-03
  • 打赏
  • 举报
回复
引用 10 楼 thinkpadcsdn 的回复:
学习学习学习学习
别沉了....
menghuidaoxiang 2018-03-03
  • 打赏
  • 举报
回复
有人么,帮帮忙啊...........新手...........
raynors 2018-03-02
  • 打赏
  • 举报
回复
你这问题匪夷所思,我有些猜测,但是重复不出来 没用,你把你出错的地方来个截图,顺便把当前关联变量的值也发出来看。 是不是这句    Dim mytag() As String = con.Tag.ToString.Split(":") 出错了?
menghuidaoxiang 2018-03-02
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
请在构造函数里面呼叫 setTag。 你不能假定 FormLoad 会是第一个被呼叫的。 你能正确运行是因为你没有踩到雷上。不代表没有BUG。
咋改的?还是不行呢,帮个忙晒,谢谢
Saleayas 2018-03-02
  • 打赏
  • 举报
回复
请在构造函数里面呼叫 setTag。 你不能假定 FormLoad 会是第一个被呼叫的。 你能正确运行是因为你没有踩到雷上。不代表没有BUG。
menghuidaoxiang 2018-03-02
  • 打赏
  • 举报
回复
引用 5 楼 raynors 的回复:
你这问题匪夷所思,我有些猜测,但是重复不出来 没用,你把你出错的地方来个截图,顺便把当前关联变量的值也发出来看。 是不是这句    Dim mytag() As String = con.Tag.ToString.Split(":") 出错了?
重复不出来?下载我出错那个文件,运行就会出现这个问题啊 ,就是Dim mytag() As String = con.Tag.ToString.Split(":") 出现《System.NullReferenceException:“未将对象引用设置到对象的实例。”System.Windows.Forms.Control.Tag.get 返回 Nothing。》的错误啊,关联变量的值怎么发出来哦,我新手呢,搞不来,我对照过,两个文件的所有我能看到的,包括Windows 窗体设计器生成的代码,我发现我用正常的Windows 窗体设计器生成的代码替换报错的Windows 窗体设计器生成的代码,能正常运行,但是如果移动一点控件的位置,则再次出现相同的错误 <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class Form1 Inherits System.Windows.Forms.Form 'Form 重写 Dispose,以清理组件列表。 <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 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意: 以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改它。 '不要使用代码编辑器修改它。 <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button() Me.SuspendLayout() ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(54, 67) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(142, 60) Me.Button1.TabIndex = 0 Me.Button1.Text = "Button1" Me.Button1.UseVisualStyleBackColor = True ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 15.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(282, 253) Me.Controls.Add(Me.Button1) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False) End Sub Friend WithEvents Button1 As Button End Class
menghuidaoxiang 2018-03-01
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
http://download.csdn.net/download/caozhy/10251706 这里有个文件比较工具,你可以试试看(因为某种原因,标题不能用这个软件的名字)
没钱
threenewbee 2018-02-28
  • 打赏
  • 举报
回复
http://download.csdn.net/download/caozhy/10251706 这里有个文件比较工具,你可以试试看(因为某种原因,标题不能用这个软件的名字)
menghuidaoxiang 2018-02-28
  • 打赏
  • 举报
回复
引用 1 楼 raynors 的回复:
https://pan.baidu.com/s/1nwO7SFJ 没毛病 找不出原因 你自己都说了,同样的程序,同样软件,换台电脑就不行了。
出错那台电脑才是常用的电脑啊
raynors 2018-02-28
  • 打赏
  • 举报
回复
https://pan.baidu.com/s/1nwO7SFJ 没毛病 找不出原因 你自己都说了,同样的程序,同样软件,换台电脑就不行了。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧