标题:《控件按比例随窗体缩放》的代码报错 System.Windows.Forms.Control.Tag.ge ...
只看楼主
紫竹墨影
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2018-2-17
结帖率:50%
 问题点数:0 回复次数:4 
《控件按比例随窗体缩放》的代码报错 System.Windows.Forms.Control.Tag.get 返回 Nothing
Public Class Form1

Dim x As Single = 0
Dim y As Single = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'得到原始窗体大小
x = Me.Width
y = Me.Height
setTag(Me)
End Sub

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
setControls(newx, newy, Me)
End Sub
'递归取控件的原始大小和位置,用tag来纪录
Private Sub setTag(ByVal obj As Object)
For Each con As Control In obj.Controls
con.Tag = con.Width & ":" & con.Height & ":" & con.Left & ":" & con.Top & ":" & con.Font.Size
'如果是容器控件,则递归继续纪录
If con.Controls.Count > 0 Then
setTag(con)
End If
Next
End Sub
'递归重新设定控件的大小和位置
Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
For Each con As Control In obj.Controls
con.AutoSize = False
Dim mytag() As String = con.Tag.ToString.Split(":")
con.Width = mytag(0) * newx
con.Height = mytag(1) * newy
con.Left = mytag(2) * newx
con.Top = mytag(3) * newy
'计算字体缩放比例,缩放字体
Dim currentSize As Single = newy * mytag(4)
con.Font = New Font(con.Font.Name, currentSize, _
con.Font.Style, con.Font.Unit)
'如果是容器控件,则递归继续缩放
If con.Controls.Count > 0 Then
setControls(newx, newy, con)
End If
Next
End Sub
End Class

这段代码是我在网上复制的《控件按比例随窗体缩放》的代码,我在一个窗口中已经调试成功了,然而在另一个窗体中的出现《System.NullReferenceException:“未将对象引用设置到对象的实例。”System.Windows.Forms.Control.Tag.get 返回 Nothing。》的错误,然后我从新建立了一个窗体应用,随意加几个控件也是这个错误,我再次将通过调试的窗体控件复制到新建的窗体应用里面,再次调试,还是这个错误,请问我这问题到底可能出在哪里呢,请帮忙,谢谢
收起
我X,我刚刚随意更改那个调试成功窗体里面的一个控件的位置,然后调试就不成功了........
搜索更多相关主题的帖子: 控件 窗体 Sub ByVal con 
2018-02-17 21:53
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
代码很实用,已经收藏了,调试一次成功后,我也调整了窗体上的控件大小和位置,没发现有楼主的问题。

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2018-02-18 20:34
紫竹墨影
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2018-2-17
得分:0 
回复 2楼 不懂才问
你的VS版本是多少啊,我的是VS2017,我怀疑是不是新版本有改动哦
2018-02-18 21:52
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
回复 3楼 紫竹墨影



报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2018-02-18 23:18
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
回复 3楼 紫竹墨影
版本应该不是问题,VS2005和VS2015我都试过了

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2018-02-18 23:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484774-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.196902 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved