真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

vb點(diǎn)虐 創(chuàng)建多窗體 vb多窗體程序設(shè)計(jì)

在VB中怎么同時(shí)創(chuàng)建多個(gè)窗體?

我做了幾行。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供青川網(wǎng)站建設(shè)、青川做網(wǎng)站、青川網(wǎng)站設(shè)計(jì)、青川網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、青川企業(yè)網(wǎng)站模板建站服務(wù),十余年青川做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

對(duì)無標(biāo)題欄的窗體,或者不從標(biāo)題欄移動(dòng)的情況下可用。

有標(biāo)題欄并且點(diǎn)住標(biāo)題欄移動(dòng)則不理想。

代碼如下,僅供參考。

1、建立模塊。

option

explicit

public

oldproc

as

long

public

declare

function

setwindowlong

lib

"user32"

alias

"setwindowlonga"

(byval

hwnd

as

long,

byval

nindex

as

long,

byval

dwnewlong

as

long)

as

long

public

declare

function

sendmessage

lib

"user32"

alias

"sendmessagea"

(byval

hwnd

as

long,

byval

wmsg

as

long,

byval

wparam

as

long,

byref

lparam

as

any)

as

long

public

declare

function

callwindowproc

lib

"user32"

alias

"callwindowproca"

(byval

lpprevwndfunc

as

long,

byval

hwnd

as

long,

byval

msg

as

any,

byval

wparam

as

any,

byval

lparam

as

any)

as

long

public

const

wm_move

=

h3

public

const

wm_lbuttondown

=

h201

public

const

wm_lbuttonup

=

h202

public

const

gwl_wndproc

=

(-4)

public

bnhwnd

as

long

public

function

newproc(byval

hwnd

as

long,

byval

msg

as

long,

byval

wp

as

long,

byval

lp

as

long)

as

long

if

msg

=

wm_move

then

'捕獲窗體移動(dòng)事件

sendmessage

bnhwnd,

wm_lbuttondown,

1,

sendmessage

bnhwnd,

wm_lbuttonup,

1,

'將消息發(fā)送到按紐,使其發(fā)生click事件

end

if

newproc

=

callwindowproc(oldproc,

hwnd,

msg,

wp,

lp)

end

function

2、在窗體上有一個(gè)按鈕(名稱為eventbn)

dim

原垂直

as

single,

原水平

as

single

private

sub

eventbn_click()

msgbox

"移動(dòng)了"

end

sub

private

sub

form_load()

form2.show

form3.show

bnhwnd

=

eventbn.hwnd

'獲得按紐句丙

oldproc

=

setwindowlong(me.hwnd,

gwl_wndproc,

addressof

newproc)

eventbn.visible

=

false

end

sub

private

sub

form_mousedown(button

as

integer,

shift

as

integer,

x

as

single,

y

as

single)

if

button

=

1

then

原垂直

=

me.top

+

y

原水平

=

me.left

+

x

end

if

end

sub

private

sub

form_mouseup(button

as

integer,

shift

as

integer,

x

as

single,

y

as

single)

me.top

=

me.top

-

原垂直

+

y

me.left

=

me.left

-

原水平

+

x

form2.top

=

form2.top

-

原垂直

+

y

form2.left

=

form2.left

-

原水平

+

x

form3.top

=

form3.top

-

原垂直

+

y

form3.left

=

form3.left

-

原水平

+

x

end

sub

3、其他窗體基本都這樣。

VB怎么弄多個(gè)窗口

如果是VB.NET

那么可以直接從一個(gè)父窗體類繼承,例如

Dim

NewFrm

as

New

Form1

NewFrm.Show

這樣可以為一個(gè)窗體創(chuàng)建N個(gè)相同的子類,并且通過類的方法覆蓋,可以與父類有所不同

在VB.NET中怎么實(shí)現(xiàn)多窗體同步

這是一個(gè)有趣的問題 我保證某些聰明的編程好手會(huì)建議我使用委托 在這種事情發(fā)生之前 讓我們 先探究一下這個(gè)問題的幾種解決方案 假定我有兩個(gè)窗體 每個(gè)窗體都有兩個(gè) textbox 控件 txt stData 和 txt ndData 我怎樣才能保持這兩個(gè)窗體中的控件同步呢?對(duì)于我們討論的問題來說 有兩個(gè)或十個(gè)窗體都不重要 問題是相同的 第一個(gè)辦法相對(duì)簡(jiǎn)單 事實(shí)上 它甚至比我們直接使用委托更為簡(jiǎn)單 我想委托有時(shí)會(huì)給人用牛刀殺雞的感覺 首先 我建立一個(gè)類它包含我希望與應(yīng)用程序中的所有窗體共享的屬性(參見 Figure ) 例如 MyData 和 MoreData 擁有每個(gè)窗體都能顯示的數(shù)據(jù) 我將很快回到這個(gè)類來 第二 正如我早先提到的我用相同的控件(txt stData 和 txt ndData)建立了兩個(gè)窗體 你可以參考 Figure 的布局 兩個(gè)窗體都有完全相同的數(shù)據(jù) 并且我將很快解釋為什么 下面 我建立一個(gè)名為 modGeneral 的模塊并加入下面一行代碼 Friend DataStuff As DataClass 這一行代碼為我的新類 DataClass 創(chuàng)建了一個(gè)友元變量 使你可以完全訪問程序集 對(duì)這個(gè)簡(jiǎn)單例子來說 也就是指完整的應(yīng)用程序 然后我添加了下面的代碼到 Form 的 Load 事件 DataStuff = New DataClass Me txt stData DataBindings Add( Text DataStuff MyData ) Me txt ndData DataBindings Add( Text DataStuff MoreData ) 第一行建立一個(gè) DataClass 新實(shí)例 下面兩行代碼將數(shù)據(jù)綁定到 textbox 控件 對(duì)這個(gè)窗體而言 就這么些操作! 現(xiàn)在 你怎樣讓它們與 Form 和其它窗體上的數(shù)據(jù)同步呢?將下面兩行加入到 Form 的窗體load 事件中去 Me txt stData DataBindings Add( Text DataStuff MyData ) Me txt ndData DataBindings Add( Text DataStuff Moredata ) 這個(gè)方法容易確保所有窗體上的幾乎任何類型的數(shù)據(jù)處于同步狀態(tài) 你可以簡(jiǎn)單地將控件綁定到某個(gè)類的相同實(shí)例上 這就行了 現(xiàn)在來看另一個(gè)方法 我創(chuàng)建了一個(gè)名為 frmBase 的新窗體 這時(shí)我在上面放一個(gè) textbox (txtNextData)和 label 我想 讓應(yīng)用程序的每個(gè)窗體都共享這個(gè) textbox 和 label 并且我希望它們互相之間保持同步 于是我重建這個(gè)工程 通過從新的 frmBase 中的繼承 我創(chuàng)建了 Form 和Form 因此它們繼承了所有新的控件 但是我怎樣能保持這些控件同步呢?這時(shí)必須寫一點(diǎn)代碼去達(dá)到此效果 這些代碼在單個(gè)的類中 通過簡(jiǎn)單地調(diào)用一個(gè)函數(shù)而被復(fù)用 Figure 中的代碼展示了這個(gè)稱為 modGeneral 模塊 它的第一個(gè)任務(wù)是定義兩個(gè)變量 MyForms 和 localNextData MyForms 是一個(gè) 集合 它將包含我想要同步的窗體列表 localNextData變量將儲(chǔ)存所有我想要在窗體里顯示的數(shù)據(jù) 注意這些變量可以駐留于某個(gè)類中而不是某個(gè)模塊里 AddForm 過程來自 modGeneral 帶一個(gè)窗體實(shí)例參數(shù) 并將其加入 MyForms 集合中 我將在UpdateControlsNextData 過程中使用這個(gè) 集合以決定哪些窗體要更新 AddForm 也調(diào)用UpdateControlsNextData 來確保一個(gè)新窗體是用正確的數(shù)據(jù)更新的 modGeneral 中的其它代碼是 NextData 屬性 這些屬性的 set 存取器更新 localNextData 并也調(diào)用 UpdateControlsNextData 去同步所有窗體 這時(shí)所有我需要做的是 在想要改變它時(shí)設(shè)置 NextData 通過調(diào)用 UpdateControlsNextData 所有窗體將被更新 第三個(gè)方法是定制鏈接 它是第二個(gè)方法的精華版 我創(chuàng)建它以獲得多一些窗體控件處理的靈活性 例如 我只想跟蹤和處理某些窗體 這些窗體包含必須同步的控件 這個(gè)方法 還可以讓我自己定義擬同步的控件 并且只處理這些控件的窗體 我為這個(gè)辦法添加了另一個(gè)模塊 (modGeneralv ) 如 Figure 所示 該模塊包括一個(gè)集合(MyFormsToUpdate) 其中包含所有我想要同步的窗體 這個(gè)模塊 還有一個(gè)新的數(shù)組 (ControlsToUpdate) 它提供一個(gè)我要同步的控件列表 該數(shù)組的定義如下 Private ControlsToUpdate() As String = { txtCustomer txtAddress txtName } 這個(gè)模塊里有一個(gè)新的替代 AddForm 的改良版本 叫做 AddFormToUpdate 該方法工作方式與AddForm 類似 但現(xiàn)在它只添加擁有一個(gè)或多 個(gè) ControlsToUpdate 數(shù)組中控件的窗體 因此只有那些含有特定控件的窗體在更新集合中 它使我可以從每個(gè)窗體中調(diào)用該函數(shù) 如果我決定以后添加某個(gè)特定的控件 它將會(huì)被自動(dòng)添加到窗體列表 我只需對(duì)窗體代碼做細(xì)小的改動(dòng)便可以實(shí)現(xiàn) 這個(gè)模塊還包含 UpdateControlsOnAllForms 過程 它執(zhí)行更新 代替上一個(gè)方法中使用的一個(gè)應(yīng)用程序級(jí)變量 我現(xiàn)在使用主窗體的概念 因此我可以將那個(gè)窗體的值拷貝到集合中的所有其它窗體 UpdateControlsOnAllForms 其實(shí)就是一組簡(jiǎn)單的 For Nexts 循環(huán)遍歷某個(gè)窗體的所有控件 找到需要更新的控體 并更新它們 為了在我的窗體中實(shí)現(xiàn)這一功能 我在窗體的 Load 事件中加入了這一行代碼 AddFormToUpdate(Me) 另外一種可選的方法 我可以將它添加到構(gòu)造函數(shù) 這一行代碼將把當(dāng)前窗體實(shí)例添加到集合進(jìn)行更新 現(xiàn)在讓我們考察單個(gè)事件過程 Private Sub txt_Leave(ByVal sender As Object _ ByVal e As System EventArgs) Handles txtAddress Leave _ txtCustomer Leave txtName Leave UpdateControlsOnAllForms(Me) End Sub 這段代碼將我想要同步的所有三個(gè)控件 (txtAddress txtCustomer 和 txtName)的 Leave 事件捆綁到一個(gè)事件句柄上 這時(shí)我可以添加一行代碼 來調(diào)用 UpdateControlsOnAllForms Me 被傳遞到該過程調(diào)用 從而導(dǎo)致其它窗體與該窗體同步 現(xiàn)在我有三個(gè)版本的代碼 它們都可以同步窗體中控件 因此我可以進(jìn)行選擇 我可能已經(jīng)使用了自定義事件 在 DataClass 中定義某個(gè)事件并讓每個(gè)窗體都預(yù)訂它 然后當(dāng)這個(gè)事件觸發(fā)時(shí) 這些窗體可以從每個(gè)事件句柄中獲取新的數(shù)據(jù)并設(shè)置適當(dāng)?shù)目丶?但是這樣做所需的代碼量一點(diǎn)也不會(huì)比第一種方法中將控件綁定到類來得少 我可以構(gòu)建單個(gè)實(shí)現(xiàn)更新的過程 并將該過程放到某個(gè)模塊中 我需要向該過程傳遞窗體實(shí)例來實(shí)現(xiàn)更新 我可以用類中的某個(gè)事件句柄觸發(fā)這個(gè)過程 此過程看起來就像這樣 Sub UpdateControls(ByVal ThisForm As frmBase) With ThisForm txtNextData Text = localNextData End With End Sub ThisForm 參數(shù)被定義為 frmBase 類型 以便它可以訪問 IntelliSense 并獲得窗體的自定義屬性 簡(jiǎn)單地將它寫成 Form 將無法顯示 frmBase 中的屬性及其派生窗體 另一選擇是使用委托 當(dāng)然 委托可以讓我將委托調(diào)用重定向到每個(gè)窗體的方法上 如果我使用多播機(jī)制 那么我可以讓每個(gè)窗體都處理該事件并更新相應(yīng)的控件 用委托建立這樣的功能聽起來確實(shí)簡(jiǎn)單 但 對(duì)我來說它更麻煩且沒有實(shí)踐價(jià)值 此外 與第三個(gè)方法中的 For Next 循環(huán)嵌套相比 這個(gè)代碼并不難理解 畢竟 一個(gè)應(yīng)用程序花費(fèi)最大的部分仍然是它的維護(hù) lishixinzhi/Article/program/net/201311/11593

如何給VB.NET窗體添加子窗體?

直接添加一個(gè)MID父窗體或在已有窗體的屬性中找到IsMDIContainer屬性,然后設(shè)置為True,然后創(chuàng)建第二個(gè)窗體 ,需要加載子窗體的時(shí)候:

Dim NewMDIChild As New Form2

NewMDIChild.MdiParent = Me

NewMDIChild.Show()

Public?Shared?Sub?CheckMDIChildForm(ByVal?MDIForm?As?Windows.Forms.Form,?ByVal?MDIChildForm?As?Windows.Forms.Form,?ByVal?MDIChildFormName?As?String)

If?MDIForm.MdiChildren.Length??1?Then

'如果沒有任何一個(gè)MDI子窗體,則創(chuàng)該MDI子窗體的窗體實(shí)例

Dim?MDIChildFrm?As?Windows.Forms.Form?=?MDIChildForm?'?定義MDI子窗體

MDIChildFrm.MdiParent?=?MDIForm?'指定父窗體

MDIChildFrm.Show()?'打開窗體

Exit?Sub

Else

Dim?x?As?Integer

Dim?frmyn?As?Boolean

For?x?=?0?To?(MDIForm.MdiChildren.Length)?-?1

Dim?tempChild?As?Windows.Forms.Form?=?CType(MDIForm.MdiChildren(x),?Windows.Forms.Form)

If?tempChild.Name?=?MDIChildFormName?Then

'檢測(cè)到有該MDI子窗體,設(shè)為激活?并退出循環(huán)

frmyn?=?True

tempChild.BringToFront()

Exit?For

Else

frmyn?=?False

End?If

Next

If?Not?frmyn?Then

'在打開的窗體中沒檢測(cè)到則新建

Dim?MDIChildFrm?As?Windows.Forms.Form?=?MDIChildForm?'?定義MDI子窗體

MDIChildFrm.MdiParent?=?MDIForm?'指定父窗體

MDIChildFrm.Show()?'打開窗體

End?If

End?If

End?Sub


分享文章:vb點(diǎn)虐 創(chuàng)建多窗體 vb多窗體程序設(shè)計(jì)
當(dāng)前網(wǎng)址:http://weahome.cn/article/ddjdcgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部