国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
通用的報(bào)表式數(shù)據(jù)錄入

 

實(shí)際應(yīng)用問題:
報(bào)表數(shù)據(jù)錄入界面設(shè)計(jì)是交互式應(yīng)用程序最基本的一個(gè)步驟。在visual basic 6環(huán)境下,這種界面的設(shè)計(jì)更是方便而且快捷,通常的做法是為每一個(gè)錄入模塊設(shè)計(jì)一個(gè)form,在其中放入眾多的lable控件和textbox控件,label控件用于提示輸入的報(bào)表欄目名稱,textbox控件用于接收實(shí)際的數(shù)據(jù)錄入。
本文嘗試實(shí)現(xiàn)一種通用的報(bào)表式數(shù)據(jù)錄入方式,目的是:1、報(bào)表欄目名稱不是在程序設(shè)計(jì)階段決定,而是在程序運(yùn)行階段從預(yù)先存儲(chǔ)的文件或數(shù)據(jù)庫(kù)表中取得;2、對(duì)應(yīng)于第1點(diǎn)報(bào)表欄目的運(yùn)行時(shí)動(dòng)態(tài)決定,相應(yīng)的數(shù)據(jù)錄入的條目也應(yīng)該是變化的,設(shè)想使用類似excel的輸入方式,但是提供一些更靈活的控制方式。

實(shí)現(xiàn)步驟以及原理:
首先實(shí)現(xiàn)第二步,使用一個(gè)msflexgrid控件和一個(gè)textbox控件,再加上對(duì)這兩個(gè)控件的一些不太常用的事件進(jìn)行編程,就可以較好的實(shí)現(xiàn)這一步。Msflexgird控件應(yīng)該是有兩欄,左欄是報(bào)表的欄目名稱,右欄是錄入的數(shù)據(jù),但是數(shù)據(jù)并不是直接錄入在右欄,而是錄入在textbox中,所以要解決是如何將textbox正好嵌入到右欄的某個(gè)網(wǎng)格中,而且按下回車或光標(biāo)控制鍵切換到另一欄進(jìn)行輸入后,如何使msflexgrid反映textbox中輸入的數(shù)據(jù),并且textbox顯示當(dāng)前欄目的數(shù)據(jù)用以修改或錄入,同時(shí)要支持回車鍵、光標(biāo)鍵以及鼠標(biāo)直接點(diǎn)擊到某個(gè)欄目的網(wǎng)格中進(jìn)行錄入。
實(shí)際程序運(yùn)行時(shí)的控件的顯示(黃色的方框表示嵌入到msflexgrid的textbox控件):
 
假設(shè)textbox的實(shí)例名為text1,msflexgrid的實(shí)例名為msflexgrid1;
代碼如下:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 38  ' 光 標(biāo) 向 上
If t04 < 11 Then
  If MSFlexGrid1.Row > 1 Then
  MSFlexGrid1.Row = MSFlexGrid1.Row - 1
  Else
  MSFlexGrid1.Row = t04
  End If
Else
If MSFlexGrid1.Row > MSFlexGrid1.TopRow Then
MSFlexGrid1.Row = MSFlexGrid1.Row - 1
ElseIf MSFlexGrid1.Row = MSFlexGrid1.TopRow And MSFlexGrid1.Row <> 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row - 1
MSFlexGrid1.TopRow = MSFlexGrid1.TopRow - 1
Else
MSFlexGrid1.Row = t04
rownum = 10
colnum = 1 '防止最后一行回車后,跳轉(zhuǎn)到第十行,而應(yīng)該跳到第一行
MSFlexGrid1.TopRow = t04
End If
End If
colnum = MSFlexGrid1.Col - MSFlexGrid1.LeftCol + 1
rownum = MSFlexGrid1.Row - MSFlexGrid1.TopRow + 1
Text1.Text = MSFlexGrid1.Text
Text1.Left = MSFlexGrid1.Left + (MSFlexGrid1.ColWidth(0) _
          + MSFlexGrid1.GridLineWidth * 12) * colnum
Text1.Top = MSFlexGrid1.Top + (MSFlexGrid1.RowHeight(0) _
          + MSFlexGrid1.GridLineWidth * 12) * rownum

Exit Sub

Case 40  ' 光 標(biāo) 向 下
If t04 < 11 Then
  If MSFlexGrid1.Row < t04 Then
  MSFlexGrid1.Row = MSFlexGrid1.Row + 1
  Else
  MSFlexGrid1.Row = 1
  End If
Else
If MSFlexGrid1.Row < MSFlexGrid1.TopRow + 10 - 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
ElseIf MSFlexGrid1.Row <> t04 And MSFlexGrid1.Row = MSFlexGrid1.TopRow + 10 - 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
MSFlexGrid1.TopRow = MSFlexGrid1.TopRow + 1
Else
MSFlexGrid1.Row = 1
rownum = 1
colnum = 1 '防止最后一行回車后,跳轉(zhuǎn)到第十行,而應(yīng)該跳到第一行
MSFlexGrid1.TopRow = 1
End If
End If
colnum = MSFlexGrid1.Col - MSFlexGrid1.LeftCol + 1
rownum = MSFlexGrid1.Row - MSFlexGrid1.TopRow + 1
Text1.Text = MSFlexGrid1.Text
Text1.Left = MSFlexGrid1.Left + (MSFlexGrid1.ColWidth(0) _
             + MSFlexGrid1.GridLineWidth * 12) * colnum
Text1.Top = MSFlexGrid1.Top + (MSFlexGrid1.RowHeight(0) _
             + MSFlexGrid1.GridLineWidth * 12) * rownum
Exit Sub
Case 13  ' 回 車
If t04 < 11 Then
  If MSFlexGrid1.Row < t04 Then
  MSFlexGrid1.Row = MSFlexGrid1.Row + 1
  Else
  MSFlexGrid1.Row = 1
  End If
Else
If MSFlexGrid1.Row < MSFlexGrid1.TopRow + 10 - 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
ElseIf MSFlexGrid1.Row <> t04 And MSFlexGrid1.Row = MSFlexGrid1.TopRow + 10 - 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
MSFlexGrid1.TopRow = MSFlexGrid1.TopRow + 1
Else
MSFlexGrid1.Row = 1
rownum = 1
colnum = 1 '防止最后一行回車后,跳轉(zhuǎn)到第十行,而應(yīng)該跳到第一行
MSFlexGrid1.TopRow = 1
End If
End If
colnum = MSFlexGrid1.Col - MSFlexGrid1.LeftCol + 1
rownum = MSFlexGrid1.Row - MSFlexGrid1.TopRow + 1
Text1.Text = MSFlexGrid1.Text
Text1.Left = MSFlexGrid1.Left + (MSFlexGrid1.ColWidth(0) _
            + MSFlexGrid1.GridLineWidth * 12) * colnum
Text1.Top = MSFlexGrid1.Top + (MSFlexGrid1.RowHeight(0) _
           + MSFlexGrid1.GridLineWidth * 12) * rownum
Exit Sub
End Select
End Sub

Private Sub Text1_Change()
MSFlexGrid1.Text = Text1.Text
End Sub

Private Sub MSFlexGrid1_Scroll()
MSFlexGrid1.Row = MSFlexGrid1.TopRow + rownum - 1
Text1.Left = MSFlexGrid1.Left + (MSFlexGrid1.ColWidth(0) _
          + MSFlexGrid1.GridLineWidth * 12) * colnum
Text1.Top = MSFlexGrid1.Top + (MSFlexGrid1.RowHeight(0) _
          + MSFlexGrid1.GridLineWidth * 12) * rownum
Text1.Text = MSFlexGrid1.Text
End Sub
Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, X As Single, y As Single)
Text1.SetFocus
End Sub
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, y As Single)
MSFlexGrid1.Col = MSFlexGrid1.ColSel
MSFlexGrid1.Row = MSFlexGrid1.RowSel
Text1.Text = MSFlexGrid1.Text
colnum = MSFlexGrid1.Col - MSFlexGrid1.LeftCol + 1
rownum = MSFlexGrid1.Row - MSFlexGrid1.TopRow + 1
Text1.Left = MSFlexGrid1.Left + (MSFlexGrid1.ColWidth(0) _
         + MSFlexGrid1.GridLineWidth * 12) * colnum
Text1.Top = MSFlexGrid1.Top + (MSFlexGrid1.RowHeight(0) _
         + MSFlexGrid1.GridLineWidth * 12) * rownum
End Sub
這些代碼一是實(shí)現(xiàn)了textbox的定位,以使它與msflexgrid融合;二是處理了回車鍵(表示一欄輸入完畢回車切換到下一欄的錄入),支持了上下光標(biāo)鍵(切換到上或下個(gè)欄目),支持了鼠標(biāo)直接點(diǎn)擊某個(gè)欄目進(jìn)行輸入,同時(shí)也考慮了對(duì)msflexgrid進(jìn)行scroll操作時(shí)會(huì)出現(xiàn)的問題。
需要注意的是在form_load中還需要進(jìn)行一些初始化設(shè)置:
MSFlexGrid1.ColWidth(0) = 2000
MSFlexGrid1.RowHeight(0) = 216
'文本框的寬、高度
Text1.Width = MSFlexGrid1.ColWidth(1)
Text1.Height = MSFlexGrid1.RowHeight(1)
'文本框的位置
Text1.Left = MSFlexGrid1.Left + MSFlexGrid1.ColWidth(0) _
           + MSFlexGrid1.GridLineWidth * 12
Text1.Top = MSFlexGrid1.Top + MSFlexGrid1.RowHeight(0) _
           + MSFlexGrid1.GridLineWidth * 12
MSFlexGrid1.Cols = 2
MSFlexGrid1.Rows = 20 '表中總的列、行數(shù)
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 1  ' 網(wǎng)格的列、行初始位置
MSFlexGrid1.LeftCol = 1
MSFlexGrid1.TopRow = 1   '網(wǎng)格中左上角的列、行初始位置

**************************************************
第二步的討論到此可以結(jié)束,下面實(shí)現(xiàn)第一步。
上面的代碼中只有一個(gè)t04的變量未定義,這就是接著要討論的前面第一部分提出的第一步:動(dòng)態(tài)的報(bào)表欄目。使用數(shù)據(jù)庫(kù)是自然的選擇,為實(shí)現(xiàn)這個(gè)目的,我設(shè)計(jì)了兩個(gè)數(shù)據(jù)表;
一個(gè)表(table1)用于保存該種報(bào)表的信息,結(jié)構(gòu)如下:
t01:數(shù)值型,報(bào)表編號(hào);
t02:文本型,報(bào)表名稱;
t03:數(shù)值型,報(bào)表種類,指年報(bào)、季報(bào)或月報(bào)等,本文不使用;
t04:數(shù)值型,該報(bào)表的欄目數(shù),t04變量也取自這個(gè)值。

另一個(gè)表(table2)用于存儲(chǔ)具體的欄目名稱,結(jié)構(gòu)如下:
t01:數(shù)值型,對(duì)應(yīng)上表中的t01;
xm1:文本型,欄目名稱1;
xm2:文本型,欄目名稱2;
以下是重復(fù)的欄目名稱,一般增加到xm50(欄目名稱50)就足夠了。

于是接下來要做的是根據(jù)用戶的選擇的報(bào)表種類,讀取一表中的t04,然后循環(huán)讀取二表的欄目填充到msflexgrid的左欄。
由于數(shù)據(jù)庫(kù)操作的特點(diǎn)和msflexgrid控件的特性,操作十分簡(jiǎn)單,基本代碼如下:
Set adorepRS1 = adorepConn.OpenRecordset("Select * From table2 WHERE t01=" & t01)
For i = 1 To t04
MSFlexGrid1.Row = i
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = adorepRS1.Fields(i)
Next i
adorepRS1.Close
因?yàn)榭紤]到重新選擇了報(bào)表,所以需要再進(jìn)行一些msflexgrid和textbox的初始化:
MSFlexGrid1.Cols = 2
MSFlexGrid1.Rows = t04 + 1 '表中總的列、行數(shù)

MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 1  ' 網(wǎng)格的列、行初始位置
MSFlexGrid1.LeftCol = 1
MSFlexGrid1.TopRow = 1   '網(wǎng)格中左上角的列、行初始位置
Text1.Left = MSFlexGrid1.Left + MSFlexGrid1.ColWidth(0) _
           + MSFlexGrid1.GridLineWidth * 12
Text1.Top = MSFlexGrid1.Top + MSFlexGrid1.RowHeight(0) _
           + MSFlexGrid1.GridLineWidth * 12
Text1.Text = ""
Text1.SetFocus

結(jié)論:
我的開發(fā)和使用環(huán)境:windows98第二版,visual basic 6.0企業(yè)版;
到此為止,兩個(gè)目的都得到了實(shí)現(xiàn),經(jīng)我在實(shí)際的應(yīng)用程序中使用,效果比通常的設(shè)計(jì)方式簡(jiǎn)單,統(tǒng)一了錄入方式,增加報(bào)表也僅是插入一條數(shù)據(jù)庫(kù)記錄。程序在運(yùn)行時(shí)會(huì)自動(dòng)地讀取所需的信息。
同時(shí),希望通過我對(duì)這兩個(gè)使用廣泛的控件的不同的處理方式,以及對(duì)一些控件事件的復(fù)雜處理,擴(kuò)展大家使用控件的范圍和方式。在此基礎(chǔ)上進(jìn)行更多的應(yīng)用擴(kuò)展。
歡迎大家提出意見和建議。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VB實(shí)現(xiàn)類電子表格grid的數(shù)據(jù)錄入
Python操作docx文檔設(shè)置居中并創(chuàng)建表格
VB MSFlexGrid控件的幾種簡(jiǎn)單的使用方法
java-poi設(shè)置excle的字體和單元格顏色
高級(jí)軟件工程第三次作業(yè):數(shù)獨(dú)游戲界面功能
用jQuery合并表格中相同文本的相鄰單元格
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服