| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3213 人关注过本帖, 1 人收藏
标题:vb多按钮问题!
只看楼主 加入收藏
xiaomengyzy
Rank: 1
等 级:新手上路
帖 子:174
专家分:5
注 册:2008-4-27
收藏
得分:0 
回复 第10楼 Joforn 的帖子
是这样的:"例如某酒店有20间房间,有10间已经有人入住,还剩下10间。我需要添加10个按钮来表示还有10间可以入住,并且按钮的caption是从数据库里面读取的房间号,如果点击某个按钮,则表示该按钮caption所示房间号的房间有人预定或入住,然后隐藏或清除该按钮。"  这样能实现吗? 也不知道我说没说清楚。
2008-12-04 19:01
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
Joforn回复xiaomengyzy在2008-12-4 19:01的发言:
    是这样的:"例如某酒店有20间房间,有10间已经有人入住,还剩下10间。我需要添加10个按钮来表示还有10间可以入住,并且按钮的caption是从数据库里面读取的房间号,如果点击某个按钮,则表示该按钮caption所示房间号的 ...


    将下面代码框中的文本粘贴至一个新建文本,更名Form1.FRM双击打开。

'************************************************************************************************
程序代码:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   3090
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   3090
   ScaleWidth      =   4680
   StartUpPosition =   3  '窗口缺省
   Begin  CMD1 
      Caption         =   "CMD1"
      Height          =   420
      Index           =   0
      Left            =   1485
      TabIndex        =   0
      Top             =   1125
      Width           =   1005
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Private Sub CMD1_Click(Index As Integer)
  Dim I As Long, K As Long, L As Long
  If Index Then
    CMD1(Index).Visible = False
    For I = 1 To Index
      If CMD1(I).Visible = False Then K = K + 1
    Next I
    Do While I <= CMD1.UBound
      If CMD1(I).Visible Then
        CMD1(I).Top = (I - K + 1) * 50 + (I - K) * CMD1(0).Height
      Else
        K = K + 1
      End If
      I = I + 1
    Loop
  ElseIf CMD1.UBound Then
    L = Val(InputBox("请输入要退房的房号:", "南宫飘雪"))
    L = L - 100
    If L < 1 Or L > CMD1.UBound Then
      MsgBox "错误:输入的房号有误!", vbCritical, "南宫飘雪"
    ElseIf CMD1(L).Visible Then
      MsgBox "错误:此房暂时还没有人入住!", vbCritical, "南宫飘雪"
    Else
      CMD1(L).Visible = True
      For I = L + 1 To CMD1.UBound
        CMD1(I).Top = CMD1(I).Top + 50 + CMD1(0).Height
      Next I
    End If
  End If
End Sub


Private Sub Form_Click()
  Dim I As Long, K As Long, L As Long
  
  On Error Resume Next
  
  K = Val(InputBox("请输入房号数:", "南宫飘雪"))
  If K < 0 Then
    MsgBox "错误:输入有误!", vbCritical, "南宫飘雪"
    Exit Sub
  ElseIf K > 99 Then
    K = 99
  End If
  If K < CMD1.UBound Then
    For I = CMD1.UBound To K + 1 Step -1
      Unload CMD1(I)
    Next I
  End If
  For I = 1 To CMD1.UBound
    CMD1(I).Caption = "1" & Format(I, "00")
    CMD1(I).Visible = True
    CMD1(I).Top = (I + 1) * 50 + (I) * CMD1(0).Height
  Next I
  Do While I <= K
    Load CMD1(I)
    CMD1(I).Left = 150
    CMD1(I).Top = (I + 1) * 50 + (I) * CMD1(0).Height
    CMD1(I).Width = CMD1(0).Width
    CMD1(I).Height = CMD1(I).Height
    CMD1(I).Caption = "1" & Format(I, "00")
    CMD1(I).Visible = True
    I = I + 1
  Loop
End Sub

Private Sub Form_Load()
  CMD1(0).Visible = True
  CMD1(0).Top = 50
  CMD1(0).Left = 150
  CMD1(0).Caption = "退房"
End Sub


[[it] 本帖最后由 Joforn 于 2008-12-4 21:14 编辑 [/it]]

VB QQ群:47715789
2008-12-04 21:08
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:0 
以下是引用xiaomengyzy在2008-12-4 14:19的发言:

谢谢了,但是我需要的是这样的:
1.事先我并不知道要多少个按钮,按钮的数量是读取数据库的结果;
2.按钮是由程序代码添加的,不能在窗体设计时添加;
3.各个按钮都能独立的响应某个事件。


1)按我的原贴在窗体上画一个Command1控件,name属性为Command1,index属性为0(在属性窗口中设定,其默认值为空,空和0是不一样的你应当知道哦);
2)各按钮控件的位置上面已有Joforn回答,我不啰嗦了,你做完第一步把下面的代码复制到窗体的代码中就行:

Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
  MsgBox "你按下了你在窗体设计时画的按钮"
Case Else
  MsgBox "你按下了程序添加的按钮" & Index
End Select
End Sub

Private Sub Form_Load()
Dim i As Integer
Dim t As Integer
i = 5 '意思是再创建5个按钮,你从数据库里读吧
  For t = 1 To i
    Load Command1(t) '加载t个按钮,实际上窗体上是t+1个按钮了,你画窗体时画了一个
      Command1(t).Visible = True '没有这一句,加载的按钮在窗体上看不见
     '下面一句是调整加载后各个按钮的位置,Joforn回答过了,我不啰嗦了
     Command1(t).Move Command1(t - 1).Left, Command1(t - 1).Top + Command1(t - 1).Height
  Next t
End Sub

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2008-12-05 19:22
xiaomengyzy
Rank: 1
等 级:新手上路
帖 子:174
专家分:5
注 册:2008-4-27
收藏
得分:0 
回复 第12楼 Joforn 的帖子
恩,好像这样是可以的。只是还有两点:
1.按钮的caption如何从数据库中读取并显示?
2.如何给这些按钮编写相应的事件?(如:caption为103的按钮表示103房间现在空闲,点击后该按钮消失,103房间变成使用中,并且把103房间由空闲变成使用中的信息写入数据库。)   PS:现在又不能上传附件,如果能的话我把具体情况传给你就清楚多了!真心的谢谢你了!
2008-12-05 19:27
xiaomengyzy
Rank: 1
等 级:新手上路
帖 子:174
专家分:5
注 册:2008-4-27
收藏
得分:0 
回复 第13楼 不说也罢 的帖子

呵呵,我先试试。有哪里不行我再来@
2008-12-05 19:48
xiaomengyzy
Rank: 1
等 级:新手上路
帖 子:174
专家分:5
注 册:2008-4-27
收藏
得分:0 
回复 第13楼 不说也罢 的帖子
出错了。我按照你说的那样子读取数据库,结果提示“对象已经加载”。
这是程序,麻烦你看一下:
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
  MsgBox "你按下了你在窗体设计时画的按钮"
Case Else
  MsgBox "你按下了程序添加的按钮" & Index
End Select
End Sub

Private Sub Form_Load()
Dim i As Integer
Dim t As Integer
Dim n As Integer          '''''n是数据库中空闲的房间数

i = 5 '意思是再创建5个按钮,你从数据库里读吧
  For t = 1 To i
    sql = "select 房间号 from 房间信息 where 能否入住='是'"           '''''读取数据库中空闲的房间号
    Set rst = getRS(sql)
    rst.MoveFirst
    For n = 1 To rst.RecordCount
    Load Command1(t) '加载t个按钮,实际上窗体上是t+1个按钮了,你画窗体时画了一个
      Command1(t).Visible = True '没有这一句,加载的按钮在窗体上看不见
       Command1(t).Caption = rst.Fields(0)          ''''''把房间号赋值给按钮名
     '下面一句是调整加载后各个按钮的位置,Joforn回答过了,我不啰嗦了
     Command1(t).Move Command1(t - 1).Left, Command1(t - 1).Top + Command1(t - 1).Height
     rst.MoveNext
     Next n
  Next t
End Sub




'附:getrs是我创建的过程
'''''''Public Function getRS(ByVal sql As String) As ADODB.Recordset       '创建名为getRS的过程
'''''''Dim con As ADODB.Connection
'''''''Dim rs As ADODB.Recordset
'''''''Dim strConnection As String
'''''''Dim strArray() As String              '创建数组
'''''''Set con = New ADODB.Connection
'''''''Set rs = New ADODB.Recordset
'''''''On Error GoTo getRS_Error
'''''''strConnection = "Provider=Microsoft.jet.oledb.4.0;Data Source=" & App.Path & "\database.mdb"
'''''''    strArray = Split(sql)
'''''''    con.Open strConnection
'''''''    If InStr(UCase$(strArray(0)), "select") = 0 Then
'''''''    rs.Open Trim$(sql), con, adOpenStatic, adLockOptimistic
'''''''    Set getRS = rs
'''''''    Else
'''''''    con.Execute sql
'''''''    End If

[[it] 本帖最后由 xiaomengyzy 于 2008-12-5 20:05 编辑 [/it]]
2008-12-05 20:04
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:0 
丢个QQ吧,在线给你解决

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2008-12-06 14:50
xiaomengyzy
Rank: 1
等 级:新手上路
帖 子:174
专家分:5
注 册:2008-4-27
收藏
得分:0 
回复 第17楼 不说也罢 的帖子
358115593   我下午6点以后一般都会在。
2008-12-06 16:25
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:0 
以下是引用xiaomengyzy在2008-12-6 16:25的发言:

358115593   我下午6点以后一般都会在。



我已经加了你了

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2008-12-06 19:28
xiaomengyzy
Rank: 1
等 级:新手上路
帖 子:174
专家分:5
注 册:2008-4-27
收藏
得分:0 
以下是引用不说也罢在2008-12-6 19:28的发言:




我已经加了你了



好像没加上啊!你有空的时候教教我嘛,谢谢!
2008-12-06 22:09
快速回复:vb多按钮问题!
数据加载中...
 
   



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

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