VB.net中窗体上控件太多,运行时在桌面上显示不全,怎样用滚动条来解决?请详细说明,最好给个小例子。

作者&投稿:仍胃 (若有异议请与网页底部的电邮联系)
vb.net 滚动条控件使用方法~

你可以使用用一个picturebox来完成。

==界面设计==

如图,图片框名为Pic,横向滚动条名为HS,纵向滚动条名为VS。

将你的窗口内容放入Pic中。此时,Pic的大小就是你内容的大小。也就是说,Pic的大小由你来设置。

==代码编写==

滚动条的属性设置将会被放入Pic的尺寸变更事件中,也就是Resize事件中。
代码如下。
Private Sub Pic_Resize() If Pic.Width < Me.Width - VS.Width Then '当内容宽没有超过框架宽时 HS.Max = 0 HS.Enabled = False '禁用横向滚动条 Else HS.Enabled = True '否则启用横向滚动条 End If If Pic.Height < Me.Height - HS.Height Then '当内容高没有超过框架高时 VS.Max = 0 VS.Enabled = False '禁用纵向滚动条 Else VS.Enabled = True '否则启用纵向滚动条 End If HS.Max = Int((Pic.Width - Me.Width - VS.Width) / 100) '将横向滚动条的最大值动态设置为限制大小和内容大小的差的百分之一 VS.Max = Int((Pic.Height - Me.Height - HS.Height) / 100) '将纵向滚动条的最大值动态设置为限制大小和内容大小的差的百分之一End Sub 注意!滚动条MAX属性的最大值为32767。这代表内容的尺寸不能大于3276700 * 3276700。

滚动条在被滚动时要作出反应。
代码如下。
Private Sub HS_Change() Pic.Left = -HS.Value * 100 '移动Pic在Form中的水平位置,以便查看其他地方End SubPrivate Sub VS_Change() Pic.Top = -VS.Value * 100 '移动Pic在Form中的垂直位置,以便查看其他地方End Sub 注意!此操作在移动到滚动条末端时会出现不大于100的偏差。

如果要消除偏差,需要加一条判据。以水平滚动条为例。
代码如下。
If -Pic.Left > Me.Width - VS.Width Then Pic.Left = -(Me.Width - VS.Width)End If 注意!'- VS.Width' 的作用是精确框架的宽度,即将框架宽度除去滚动条宽所占的位置。同理,在垂直滚动条的事件中,应当将水平滚动条的高度去除,即 '- HS.Height'。

特殊情况:如果你的Pic大小在设计时已经超过限制大小,则在Form_Load事件中加入一条代码:
Call Pic_Resize
此时,程序可以运行。

附加!!.NET版本下,Call语句改为如下:
Call Pic_Resize(Me, e)

建立滚动条的方法如下:
(1)将鼠标移到ToolBox内的WinForm标签页的HscrollBar控件上,单击鼠标左键。
(2)将指针移至窗体中适当的位置,按住鼠标左键并拖动鼠标将HscrollBar控件调整到合适的大小放开左键。
(3)同样,再在Form上设置一个VscrollBar控件。

思路:
利用几个可以作为容器的控件,添加滚动条就可以了:
我举个例子:(这个问题我记得回答过的!)
添加1个PicTureBox1,作为容器
在PicTureBox1里添加PicTureBox2,在窗体上添加一个垂直滚动条。
把你所谓的许多控件放到PicTureBox2里,滚动条改变的是PicTureBox2在PicTureBox1里的Top属性,我想你通过一定的空间想象力,可以想到效果了吧?
注意:默认状态设置PicTureBox2的Top属性为0,当该属性为负值的时候,PicTureBox2显示的效果是向上移动,即下面原来隐藏的内容为可见了。
要设置PicTureBox2的AutoRedraw 属性为True。

若要左右移动效果,那么改变其 Left 属性,原理不再赘述了。

将窗体的Autoscroll 属性设置为True


VB.NET想用GetWindowRECT获取某窗口的坐标,但测试结果是L,T,R,B...
很简单,原因有二。第一,VB里long是32位,但是VB.NET里是64位,Dim ksWND As Integer才对。第二,VB在API里默认传址,而VB.NET默认传值,所以API里要添加Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long,添加"ByRef" lpRect As RECT) As Integer Private Declare...

VB.net 如何绑定许多button和数组
vb.net里没有像vb那样的控件数组。也就是说复制控件后粘贴没有提示你是否创建控件数组。你可以试验下面的代码。Form1.Designer.vb 设计器中的窗体代码如下,上面有六个button。最右边的用来改变前5个地text:<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> Partial Class Form1 Region...

net中,继承后的窗体不能修改自父窗体的控件吗
只是说B类继承了A类的方法事件属性什么的,如果你觉得A类的方法function_A不合适,你可以使用覆盖或者重载或者干脆新增一个方法到B类中啊,这个不是最基本的面向对象么。我用过Delphi将近一年,现在看VB.NET,基本上已经和Delphi没有太大区别了,不要上来就持否定态度:P ...

VB.NET的API调用
在Visual Basic .Net中使用“平台调用”服务,申明Windows API函数主要有二种具体的实现方法: 1. 使用DllImport特征类来申明Windows API函数。 2. 使用“Declare”语句来申明Windows API函数。 这二种方法虽有异曲同工之效,但在繁简上却有很大差异,第一种方法申明过程比较复杂,很容易在申明Windows API函数时出错,...

Visual Basic.Net基本语句
private是不提供非本地访问 三 ByVal sender As Object ByVal e As System EventArgs 这是最赏用事件传递参数 被封装于两个对象内 如果你要传递相应的参数 要在这两个对象里面找 如当前鼠标位置为e X e Y 在VB Net中有些事件是要自已动手写的 如窗体鼠标过程 一般加上这个参数在后面的括号内...

2008年4月全国计算机等级考试vb笔试真题
A) 15 B)13 C)11 D)9 (34)在窗体上从左到右有Text1、Text2两个文本框(见图),要求程序运行时,在Text1中输入1个分数后按回车键,则判断分数的合法性,若分数为0~100中的1个数,周围光标移到Text2中;否则光标不动,并弹出对话框显示“分数错”,下面程序中正确的是 A)Private Sub Text1__KeyPress(...

如何用VB设计一个简单的应用程序来实现“单击按钮打开运行计算机中的...
它是最好的 原型为 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long '再窗体画个...

vb.net如何使用TCP\/IP协议向服务器发送字符串,要用到什么控件和函数...
TCP协议是TCP\/IP协议簇中的传输层中的一个协议,也是TCP\/IP协议簇最为重要的协议之一。在TCP\/IP协议簇中,有一个协议和TCP协议非常类似,这就是UDP协议,网络上进行基于UDP协议的数据传送时,发送方只需知道接收方的IP地址(或主机名)和端口号就可以发送UDP数据包。而接收方只需知道发送方发送数据对应的端口号,就能...

VB .NET如何在计算过程中加入进度条?
VB.Net中提供了ProgressBar控件,用于显示进度条 我建议你不要用进度条显示剩余时间而是显示执行进度 这样比较好控制 设置ProgressBar的Minimum和Maximum属性为循环的起始和终止数值 然后在代码的循环体中计算当前循环的进度,然后设置进度条的Value属性,将进度显示在进度条上 比如,简单的例子:Dim Progress A...

asp.net web应用程序和asp.net web窗体应用程序的区别?
一、主体不同 1、web应用程序:是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序。2、web窗体应用程序:可以使用 Web 窗体页来创建可编程的 Web 页,这些 Web 页用作 Web 应用程序的用户界面。二、特点不同 1、web应用程序:借助IE等浏览器来运行。WEB应用程序是B\/S模式...

汝南县19369082389: VB编程运行过程中,内容太多显示全怎么办?要实际一点的回答!谢谢! -
岛莘肝炎: 你自己的问题实在有点太笼统啦.“内容太多”要分是什么内容:控件太多致使窗体装不下吗?还是文本太多,窗体装不下?等等 都要根据你的实际情况不同做不同分析和给你不同的答案.一般:窗体控件太多可以首先调整控件大小、位置、实在不行还可以对控件进行分类并同时放入不同的页面中、即分页显示.文本太多可以采用设置滚动条等形式来处理.总而言之,要根据你的实际情况分析才能给你拿出切合实际的答案哦.

汝南县19369082389: vb.net 如何删除窗体中多余的控件? -
岛莘肝炎: 晕,你把有用的控件选中,然后CTRL+X剪切,再全选窗体内控件,删除!删完了再粘贴!哈

汝南县19369082389: VB.NET窗体内容很多,会不会导致窗体最小化后在还原时很卡? -
岛莘肝炎: 所谓的“上位机传数据”,是指系统收到端口信息后,触发你代码中相应对象的事件,然后在事件处理代码中把数据写到窗体上的.不管你内容多少,还原和最小化的运行速度都和上位机本身没有关系,你看很多程序在最小化还原后很卡,要么是程序写了很多还原时触发的代码,要么是系统内存不够,把窗体移到虚拟内存(硬盘)里了.你可以用代码在窗体失去焦点激活的时候(Deactived事件)停止接收数据,还原时(Actived事件)再恢复

汝南县19369082389: VB控件满了怎么办
岛莘肝炎: 在界面设计时,是不会什么满的,可以重叠.所以你说的肯定是运行时要看见的东西太多,窗体无法全部完全显示出来. 用不着的可以先设置隐藏的呀,不可能同时都要看见吧,因为界面已经满了,只能靠自己的代码实现界面交互.用代码来...

汝南县19369082389: 在vb.net中,假设窗体上有一个TextBox(还有其他很多控件),如何在单击TextBox之外 -
岛莘肝炎: Sub Text1_Click(Index As Integer) Dim i As Interger For i=0 To Text1.Count If Not Index = i Then Text1(i).Visible = Not Text1(i).Visible Next End Sub 这个是要有数组的就是你新建个TextBox,它的对象名为Text1,然后点击右键复制,粘贴点确定....

汝南县19369082389: VB 的控件在一个窗口内能不能突破255个的数量限制啊? -
岛莘肝炎: 这是VB编程软件的限制,可以将一些只是提示没有实际作用的标签做为控制数组,另外用控制数组编程还简单,程序便于维护,如有6个按钮,里面有程序,就要写6段程序...

汝南县19369082389: vb.net 如何使用代码删除窗体内全部控件 -
岛莘肝炎: 就一句话Me.Controls.Clear() 把这句话放在操作按钮事件里就可以了

汝南县19369082389: 关于VB.Net使用的很多控件的问题 -
岛莘肝炎: 同意楼上的...还是用一种合理的设计比较好 如果是必须的这样做 建议动态创建算了 还有,就是窗体的最大控件个数好像是256

汝南县19369082389: vb.net控件批量操作问题 -
岛莘肝炎: Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load For Each con As Control In Controls If TypeOf con Is TextBox Then AddHandler con.DoubleClick, AddressOf Double_CLick End If Next End ...

汝南县19369082389: VB窗体上内容太多显示不了,如何实现一页一页的显示 -
岛莘肝炎: Private Sub Command1_Click()For i = 1 To 100 '共100行Print iIf i Mod 10 = 0 Then '每10行一页MsgBox "点击,下一页"Cls '清屏幕End IfNext i End Sub

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网