Foxtable(狐表)用户栏目专家坐堂 → 全局代码中的Public变量用代码修改


  共有40人关注过本帖树形打印复制链接

主题:全局代码中的Public变量用代码修改

帅哥,在线噢!
李小胖
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:312 积分:2684 威望:0 精华:0 注册:2017/1/8 15:53:00
全局代码中的Public变量用代码修改  发帖心情 Post By:2025/5/21 14:35:00 [只看该作者]

全局代码
Public 颜色变量变量A
在全局代码中用
Public  Sub FIXA()
    修改颜色全局变量A=B
  output.show(颜色变量变量是B)
End Sub
output.show(颜色变量变量是A)
用全局代码修改了全局颜色变量A 在 Sub 里面输出颜色是我修改的颜色B
但是离开了Sub输出 颜色变量还是A

原代码是这样的
Public  Sub fixColor(i As String, ByRef cl As Color)
[此贴子已经被作者于2025/5/21 14:37:21编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113936 积分:580301 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/21 15:02:00 [只看该作者]

上面的代码只是定义了一个过程,并没有调用,只有调用这个过程,才会执行里面的代码,全局变量的值才会改变

 回到顶部
帅哥,在线噢!
李小胖
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:312 积分:2684 威望:0 精华:0 注册:2017/1/8 15:53:00
  发帖心情 Post By:2025/5/21 15:04:00 [只看该作者]

啊...我调用了啊..我都output 了

 回到顶部
帅哥,在线噢!
李小胖
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:312 积分:2684 威望:0 精华:0 注册:2017/1/8 15:53:00
  发帖心情 Post By:2025/5/21 15:27:00 [只看该作者]

这里是全局代码:
Dim i As Integer = 0
For Each k As String In colorNames.Keys
    Output.Show(k & ":" & colorNames(k))
    If GetConfigValue(k , colorNames(k)) <> colorNames(k) Then
        output.Show(k & "颜色修改前是:" & colors(i).Name)
        '修改颜色Sub
        fixColor(GetConfigValue(k , colorNames(k)) ,colors(i))
        
        output.Show(k & "颜色修改后是:" & colors(i).Name)
        output.Show(i)
 End If
    i = i + 1
Next
截图是调试输出

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

   
[此贴子已经被作者于2025/5/21 15:28:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113936 积分:580301 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/21 16:09:00 [只看该作者]

fixColor完整代码发上来

 回到顶部
帅哥,在线噢!
李小胖
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:312 积分:2684 威望:0 精华:0 注册:2017/1/8 15:53:00
  发帖心情 Post By:2025/5/21 16:34:00 [只看该作者]

Public  Sub fixColor(i As String, ByRef cl As Color)
If i.Contains(";") AndAlso  Char.IsDigit(i(0)) Then
    '传入文本包含":"和首个字符是数字
    '颜色文本是RGB值
    
    Dim rgbValues As String() = i.Split(";"c)
    Dim r As Integer = Integer.Parse(rgbValues(0).Trim())
    Dim g As Integer = Integer.Parse(rgbValues(1).Trim())
    Dim b As Integer = Integer.Parse(rgbValues(2).Trim())
    cl = Color.FromArgb(r, g, b)
    Output.Show(cl.Name)
Else
    ' 不是包含数字
    '颜色文本是英文单词类似Red 处理
    cl = Color.FromName(i)
    Output.Show(cl.Name)
    'Output.Show("fixColor颜色是 " & cl.Name, "颜色信息")
End If
End Sub

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113936 积分:580301 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/21 16:53:00 [只看该作者]

colorNames、colors这些变量是怎么定义和赋值的?

 回到顶部
帅哥,在线噢!
李小胖
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:312 积分:2684 威望:0 精华:0 注册:2017/1/8 15:53:00
  发帖心情 Post By:2025/5/21 17:03:00 [只看该作者]

Dim colors() As Color = {_日历标题_背景起}
Dim colorNames As New Dictionary(Of String, String)
'字典键颜色的全局变量名称,字典值颜色的英文单词
colorNames.Add("_日历标题_背景起", "SteelBlue")


Dim i As Integer = 0
For Each k As String In colorNames.Keys
    Output.Show(k & ":" & colorNames(k))
    If GetConfigValue(k , colorNames(k)) <> colorNames(k) Then
        output.Show(k & "颜色修改前是:" & colors(i).Name)
        '修改颜色Sub
        fixColor(GetConfigValue(k , colorNames(k)) ,colors(i))
        
        output.Show(k & "颜色修改后是:" & colors(i).Name)
        output.Show(i)
    End If
    i = i + 1
Next

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113936 积分:580301 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/21 17:12:00 [只看该作者]

Color是结构体,不是类型,属于值类型,传入函数会变成复制的副本,使用ByRef 是没有用的,需要显示返回
全局代码
Public  function fixColor(i As String) as Color
dim cl As Color
If i.Contains(";") AndAlso  Char.IsDigit(i(0)) Then
    '传入文本包含":"和首个字符是数字
    '颜色文本是RGB值
    
    Dim rgbValues As String() = i.Split(";"c)
    Dim r As Integer = Integer.Parse(rgbValues(0).Trim())
    Dim g As Integer = Integer.Parse(rgbValues(1).Trim())
    Dim b As Integer = Integer.Parse(rgbValues(2).Trim())
    cl = Color.FromArgb(r, g, b)
    Output.Show(cl.Name)
Else
    ' 不是包含数字
    '颜色文本是英文单词类似Red 处理
    cl = Color.FromName(i)
    Output.Show(cl.Name)
    'Output.Show("fixColor颜色是 " & cl.Name, "颜色信息")
End If
return cl
End function 


调用
……
    If GetConfigValue(k , colorNames(k)) <> colorNames(k) Then
        output.Show(k & "颜色修改前是:" & colors(i).Name)
        '修改颜色Sub
        colors(i) = fixColor(GetConfigValue(k , colorNames(k)) )
        
        output.Show(k & "颜色修改后是:" & colors(i).Name)
        output.Show(i)
    End If
……
[此贴子已经被作者于2025/5/21 17:12:58编辑过]

 回到顶部