1. 程式人生 > >【Visual Basic】列表控制元件ListView的增刪改查、模態對話方塊、禁止視窗調整大小

【Visual Basic】列表控制元件ListView的增刪改查、模態對話方塊、禁止視窗調整大小

列表控制元件ListView是窗體中核心元件之一,在各種窗體程式得到廣泛應用。在《【mfc】學生資訊管理,實現List控制元件節點的增刪改查》(點選開啟連結)中極其難以實現列表控制元件ListView的增刪改查,在vb中可以輕鬆實現,下面舉一個列子來說明這個問題。


如上圖的一個ListView控制元件,點選“新增”按鈕,在彈出的模態視窗,可以為ListView控制元件新增相應的項。

通過“刪除”按鈕可以刪除選中的項。通過“修改”按鈕,選中的項的值將會傳遞到模態視窗,通過修改模態視窗的值。能夠修改相應列的內容。

製作過程:

一、控制元件佈局與屬性設定

1、新建一個vb工程,裡面已經自帶一個Form1窗體,在於裡面新增一個Form2窗體


2、如下圖所示佈局,在Form1中拖入3個按鈕,與一個ListView控制元件。點選Form1窗體,禁用Form1的最大化按鈕。同時記下此時Form1的Size,一會要寫入指令碼。


3、對於Form1的ListView1屬性,將其Modifiers從預設的Friends改為Public,以便於Form2的指令碼能操控它。否則只能在Form1的指令碼中操控此控制元件。


4、在Form2中,如下圖所示佈局,拖入三個標籤文字Label,三個文字框Textbox,一個Button1按鈕。將三個文字框Textbox的Modifiers從預設的Friends改為Public,以便於Form1的指令碼能夠操控這三個文字框。同時,對於Form2這個窗體,與Form1同樣設定,禁用最大化按鈕,同時記錄下Form2的Size


二、指令碼程式設計

1、雙擊Form1窗體、三個按鈕,編寫如下的指令碼。

其核心思想是,

(1)禁止Form1被調節大小,一旦Form1的大小被調整,則馬上回復我們設定好的Size

(2)Form1窗體載入的時候,設定好ListView與三個Button的基本屬性。

(3)“新增”按鈕Button1點選的時候,將Form2的全域性變數selectItemIndex設定為“新增”狀態。此處的selectItemIndex=-1以為沒有選擇的項。區別於“修改”按鈕Button3被點選的時候,將選擇項的索引值通過修改全域性變數的方式,送到Form2

(4)對於“刪除”按鈕,就是找出被選擇的項,將其刪除。

Public Class Form1
    '禁止調整窗體大小指令碼
    '此處無法通過Me.Width與Me.Height來取出當前窗體的寬,在窗體未完成載入之前,此值固定為系統的窗體預設值,win7為300
    '因此,手動設定好當前窗體的寬與高,就是窗體編輯區的Form1中的Size屬性
    Dim form_width As Integer = 275
    Dim form_height As Integer = 226
    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        If Me.Width <> form_width Then
            Me.Width = form_width
        End If
        If Me.Height <> form_height Then
            Me.Height = form_height
        End If
    End Sub
    '程式開始的指令碼
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "ListView控制元件的增刪改查"
        ListView1.View = View.Details '設定ListView1的樣式
        ListView1.FullRowSelect = True '選擇的時候,整行都被塗黑
        ListView1.MultiSelect = False '禁止選擇多項
        '設定各列的列名、寬度,因為這裡有3項,因此,寬度為當前ListView的寬度的三分之一。各減3畫素是放置出現橫向滾動條不美觀
        ListView1.Columns.Add("列1", CInt(ListView1.Width / 3) - 3)
        ListView1.Columns.Add("列2", CInt(ListView1.Width / 3) - 3)
        ListView1.Columns.Add("列3", CInt(ListView1.Width / 3) - 3)
        '按鈕的設定
        Button1.Text = "新增"
        Button2.Text = "刪除"
        Button3.Text = "修改"
    End Sub
    '“新增”按鈕指令碼
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.selectItemIndex = -1 '標示當前行為:“新增”
        Form2.ShowDialog() '窗體Form2以模態對話方塊的方式所開啟
    End Sub
    '“刪除”按鈕指令碼
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If ListView1.SelectedItems.Count > 0 Then
            '求出當前選擇的項,並刪除
            Dim selectItemIndex As Integer = ListView1.SelectedItems.Item(ListView1.SelectedItems.Count - 1).Index
            ListView1.Items.Item(selectItemIndex).Remove()
        Else
            MsgBox("請選擇其中的一項!")
        End If
    End Sub
    '“修改”按鈕指令碼
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If ListView1.SelectedItems.Count > 0 Then
            '求出當前選擇的項
            Dim selectItemIndex As Integer = ListView1.SelectedItems.Item(ListView1.SelectedItems.Count - 1).Index
            Form2.selectItemIndex = selectItemIndex
            '將其值賦予Form2的各個對話方塊
            Form2.TextBox1.Text = ListView1.Items.Item(selectItemIndex).SubItems(0).Text
            Form2.TextBox2.Text = ListView1.Items.Item(selectItemIndex).SubItems(1).Text
            Form2.TextBox3.Text = ListView1.Items.Item(selectItemIndex).SubItems(2).Text
            Form2.ShowDialog() '窗體Form2以模態對話方塊的方式所開啟
        Else
            MsgBox("請選擇其中的一項!")
        End If
    End Sub

End Class

2、雙擊Form2窗體與Form1中的Button1,寫入如下指令碼。

基本思想是:

(1)與Form1同樣,禁止使用者調整此窗體Form2的大小

(2)在Form2被開啟的時候,根據Form1使用者點選的按鈕時,所定義selectItemIndex全域性變數的值,設定Button1是顯示“新增”還是"修改"

(3)Form2的Button1被點選的時候,根據selectItemIndex的值,實行“新增”與“修改”動作。

Public Class Form2
    '禁止調整窗體大小指令碼
    '此處無法通過Me.Width與Me.Height來取出當前窗體的寬,在窗體未完成載入之前,此值固定為系統的窗體預設值,win7為300
    '因此,手動設定好當前窗體的寬與高,就是窗體編輯區的Form2中的Size屬性
    Dim form_width As Integer = 195
    Dim form_height As Integer = 176
    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        If Me.Width <> form_width Then
            Me.Width = form_width
        End If
        If Me.Height <> form_height Then
            Me.Height = form_height
        End If
    End Sub

    Public selectItemIndex As Integer '供Form1所控制的全域性變數,用於判斷是修改,還是新增項
    '此模態對話方塊載入的動作
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = "列1:"
        Label2.Text = "列2:"
        Label3.Text = "列3:"
        If selectItemIndex = -1 Then
            Button1.Text = "新增"
        Else
            Button1.Text = "修改"
        End If
    End Sub
    'Button1被點選的時候動作
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If selectItemIndex = -1 Then '新增
            If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Then
                MsgBox("列1、列2、列3任意一項不能為空!")
            Else
                Dim item As ListViewItem = Form1.ListView1.Items.Add(TextBox1.Text)
                Dim tStrings(2) As String
                tStrings(0) = TextBox2.Text
                tStrings(1) = TextBox3.Text
                item.SubItems.AddRange(tStrings)
                Me.Close()
            End If
        Else '修改
            If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Then
                MsgBox("列1、列2、列3任意一項不能為空!")
            Else
                Form1.ListView1.Items.Item(Me.selectItemIndex).SubItems(0).Text = TextBox1.Text
                Form1.ListView1.Items.Item(Me.selectItemIndex).SubItems(1).Text = TextBox2.Text
                Form1.ListView1.Items.Item(Me.selectItemIndex).SubItems(2).Text = TextBox3.Text
                Me.Close()
            End If
        End If
    End Sub


End Class


相關推薦

Visual Basic列表控制元件ListView刪改對話方塊禁止視窗調整大小

列表控制元件ListView是窗體中核心元件之一,在各種窗體程式得到廣泛應用。在《【mfc】學生資訊管理,實現List控制元件節點的增刪改查》(點選開啟連結)中極其難以實現列表控制元件ListView的增刪改查,在vb中可以輕鬆實現,下面舉一個列子來說明這個問題。 如上圖

Asp.Net登陸註冊+sql server刪改 小demo

由於只注重主要功能實現,並未優化前端頁面,所以看起來比較原始。 採用webform技術 三層架構 + webform顯示 Models層,資料模型層 BLL層,業務邏輯層 reference Models and DAO DAO層,資料訪問層 reference M

ASP.NET——複合控制元件之TreeView控制元件

在ASP.NET中常用的複合控制元件有:TreeView控制元件,MultiView控制元件,JavaScript方式的選項卡,WiZard控制元件。 今天先來學習TreeView控制元件。 在開發過程中經常會遇到一些有樹形層次關係的資料,比如顯示無限極分類和顯示某個檔案下的所有檔案及資

第八節PyQt5控制元件(II)

在這裡我們將繼續介紹PyQt5控制元件。我們將介紹QPixmap、QLineEdit QSplitter,QComboBox。 QPixmap QPixmap是用於處理影象的控制元件。是優化的顯示影象在螢幕上。在我們的程式碼示例中,我們將使用QPixmap視窗顯示一個影象

小程式控制元件隱藏或者顯示

最開始寫的時候運用新增class的方法,舉例:test.wxml: <view class=" {{showOrHidden?'show':'hide'}}">+++++++++++++</view>test.wxss:.hide { displa

列表控制元件ListView和介面卡Adapter

學習筆記 一個ListView通常有兩個職責: (1)將資料填充到佈局 (2)處理使用者的選擇點選等操作 一個ListView建立需要3個元素: (1)ListView中每一列的View;(2)填入View的資料或圖片等;(3)連結資料與ListView的介面卡。 介面卡

.net基礎--DropDownList控制元件:兩級聯動

    最近學習Asp.Net,發現很多控制元件都很有意思,例如:Canlender,AdRotator等。以前只知道有這樣的頁面效果,但是對這些控制元件瞭解並不多。不怕不知道,就怕不知道。   

Qt開發佈局控制元件之間的間距設定

void QLayout::setContentsMargins ( int left, int top, int right, int bottom ) Sets the left, top, right, and bottom margins to use ar

android應用——設定控制元件的透明度

1、Button或者ImageButton的背景透明或者半透明 半透明:<Button android:background="#e0000000"···> 透明:<Button android:background="#00000000"···&

asp.net使用者控制元件&自定義控制元件

    在原來的學習中,從vb到asp.net我們都接觸了很多的控制元件,這些控制元件為我們的程式開發提供了很多的便利,在程式開發中,許多功能或程式碼都需要重複的使用,我們在牛腩的時候學習了模板方法和

VB.netDataGridView控制元件的使用

        VS中的DataGridView控制元件,在機房重構裡的出鏡率還是很高噠~這篇部落格就把一些有關DataGridView 控制元件的一些使用細節和大家分享一下! 找到控制元

2048小遊戲——CSS/原生js爬坑之純CSS對話框&遊戲結束

函數 一半 窗口 內容 href 標準 tex true 存儲空間 引言:2048小遊戲的結束界面,使用純CSS制作模態對話框,一般做模態對話框都會使用BootStrap自帶的模態對話框組件方便使用,但在制作要運行在移動端的小項目時,就不能使用BootStrap,因為文件太

MFC 如何通過主對話方塊的按鈕響應建立非對話方塊

1.首先新建一個對話方塊IDD_DIALOG_Create, 並新增類CDialog_Create。 //在工程中會新生成一個Dialog_Create.h標頭檔案和一個Dialog_Create.CPP原始檔。 2.在主對話方塊的標頭檔案SerialDlg.h

筆記爬蟲+資料庫操作(刪改

基本操作: import pymysql #匯入模組 conn =pymysql.connect( host ='127.0.0.1', port =3307, user ='root', passwd='xhdake',

VUE餓了麼樹形控制元件新增刪改功能

轉自:https://segmentfault.com/a/1190000011574698#articleHeader2 element-ui樹形控制元件:地址 在原文件中有個案例是有新增和刪除功能,但是後來發現其修改的資料並不能直接影響到樹形資料,所以採用了 rende

VS2010中新控制元件的程式設計------顏色按鈕類和顏色對話方塊

(1)      顏色按鈕類和顏色對話方塊 1) 顏色對話方塊 MFC提供了顏色對話方塊類CMFCColorDialog進行顏色的選擇,系統可以利用DoModal()呼叫,然後選擇相應的顏色。 CMFCColorDialog dlg(m_Color,0, this);   

jQuery對網頁節點的刪改

本文與《【JavaScript】網頁節點的增刪改查》(點選開啟連結)為姊妹篇,其實JavaScript對DOM的操作已經總結了很久的,而對於jQuery對網頁節點的操作,雖然一直在用,但一直沒有好好總結一下,實在是不應該。 下面舉同樣的例子來說明這個問題: 如上圖,提供3

PostgreSQLPostgreSQL hstore型別資料刪改

1、登陸資料庫 psql -U postgres -d postgres 2、建立資料庫hstore,並安裝extensio

QML實現可定製對話方塊核心部分詳解

轉自 http://blog.csdn.net/r5014/article/details/70139689  

Python的列表類型操作——“刪改”,元組——“

增刪 mov 增刪改 常用 元組 for range 對象 嵌套 一、什麽是列表   1.列表是一個可變的數據類型,它由[]表示,其中的每一項元素使用“,”逗號隔開,可以儲存各種數據類型。列表相比於字符串,可以存放大量數據類型,其是有序的,有索引,可以使用切片,方便取值。