Det är så att jag arbetar på ett eget litet chatt program Om det inte är trådat (normalt): hmm hänger inte riktigt med :S OK... Du bör skapa en nyckel för noderna när du lägger till dem. Gör det oxå lätt att ta bort en användare från trädet. Du kan använda ett prefix för att identifiera vilken typ av objekt du markerat.Kontrollera om Formulär redan finns uppe
och det ska fungera lite som Peer 2 Peer
så d.v.s att det finns ett induviduellt fönster för varje person jag snackar med
men jag får det problemet att när jag klickar på samma person igen få jag upp två
chattrutor med samma person
hur gör jag för att programet ska kontrollera om fönstret med personen redan finns
och hur jag gör för att få det fönstret aktivt om det skulle finnas....
jag bifogar även en del av koden här...kanske kan vara till hjälp
för er
tack på förhand
<code>
Private Sub TreeView1_DblClick()
Dim chat As New chatruta 'chatruta är formen för chatt rutan
If TreeView1.SelectedItem = kontaktrub Then
Else
Load chat
chat.Show
chat.Caption = "Konversation med " & TreeView1.SelectedItem
End If
End Sub
</code>Sv: Kontrollera om Formulär redan finns uppe
gå igenom collection forms såhär
for each frmTemp in forms
if frmtemp.name = "chatruta" then
'här kan du testa och komma åt alla instanser av chatruta!
end if
next
Om det är trådat:
Spara alla nya instanser i en collection... Glöm inte att ta bort vis stängningSv: Kontrollera om Formulär redan finns uppe
kan du förtydliga det för mig som om jag var typ 3 år gammal :)
jag är inte jätte bra än på Vb6 Sv: Kontrollera om Formulär redan finns uppe
jag antar att du inte har trådat ditt program (vilket är överkurs)... :)
det finns en collection som heter forms som innehåller alla laddade formulär.
<code>
Om du först deklarerar två variabler:
dim frmTemp as form 'En allmän, vilket fönster som helst
dim frmChatTemp as VAD_DITT_FÖNSTER_HETER 'Deklarerar så att du kan använda t.ex. autoocomplete
Sen loopar du igenom hela din collection:
for each frmTemp in forms 'Observera frmTemp eftersom att alla öppna fönster inte är bara chat fönstret utan även t.ex. listan med användare
if frmTemp.Name = "VAD_DITT_FÖNSTER_HETER" then 'Testar vad fönstret heter, i ditt fall: VAD_DITT_FÖNSTER_HETER
set frmChatTemp = frmTemp 'Så att du kan se alla public metoder etc.
'Här kan du kolla t.ex. frmChatTemp.ChatWith <> strToChatWith
'under förutsättning att du har deklarerat en friend eler public variabel i 'VAD_DITT_FÖNSTER_HETER som innehåller namnet på den du chattar med...
end if
next
</code>
Förstod du?Sv: Kontrollera om Formulär redan finns uppe
Exempel på textnyckel:
<code>
Dim Node As Node
TreeView1.Nodes.Add , , "#Online", "Online"
Set Node = TreeView1.Nodes.Add("#Online", "Online", "U" & "Adam", "Adam")
Set Node = TreeView1.Nodes.Add("#Online", "Online", "U" & "Bengt", "Bengt")
TreeView1.Nodes.Add , , "#Offline", "Offline"
Set Node = TreeView1.Nodes.Add("#Offline", "Online", "U" & "Carl", "Carl")
TreeView1.Nodes.Remove "U" & "Adam"
</code>
Fast det är bättre att använda en nyckel som är konstant. Slipper man strul om en användare byter alias:
<code>
Dim Node As Node
TreeView1.Nodes.Add , , "#Online", "Online"
Set Node = TreeView1.Nodes.Add("#Online", "Online", "U" & 1, "Adam")
Set Node = TreeView1.Nodes.Add("#Online", "Online", "U" & 2, "Bengt")
TreeView1.Nodes.Add , , "#Offline", "Offline"
Set Node = TreeView1.Nodes.Add("#Offline", "Online", "U" & 3, "Carl")
TreeView1.Nodes.Remove "U" & 1
</code>
För att kontrollera vilka fönster som är öppna så loopar du igenom Forms Collection'en:
<code>
Dim frmForm As Form
For Each frmForm In Forms
Debug.Print frmForm.Caption
Next
</code>
Effter som den innehåller alla formulär. Så kan du begränsa sökningen genom att kolla vilken typ av formulär det är:
<code>
Dim frmForm As Form
Dim frmChat As ChatRuta
For Each frmForm In Forms
If TypeOf frmForm Is ChatRuta Then
Set frmChat = frmForm
Debug.Print frmChat.Caption
End If
Next
</code>
För att identifera vilken användare en chattruta hör till kan du lägga till en variabel som publik egenskap genom att skriva in följande kod överst i ChatRuta formuläret:
<code>
Public UserId As String
</code>
Eller om du vill ha ett ID
<code>
Public UserId As Long
</code>
Sedan kan din kod se ut något följande:
<code>
Private Sub TreeView1_DblClick()
Dim frmChat As ChatRuta
Dim frmForm As Form
Dim UserId As String
Dim SelectedItem As node
Const Prefix As String = "Konversation med "
Set SelectedItem = TreeView1.SelectedItem
If SelectedItem Is Nothing Then
Beep
Else
Select Case Left(SelectedItem, 1)
Case "U"
UserId = Mid(SelectedItem.Text, 2)
For Each frmForm In Forms
If TypeOf frmForm Is ChatRuta Then
Set frmChat = frmForm
If frmChat.UserId = UserId Then
frmForm.SetFocus
Exit For
Else
Set frmChat = Nothing
End If
End If
Next
If SelectedItem Is Nothing Then
Set frmChat = New ChatRuta
Load frmChat
frmChat.UserId = UserId
frmChat.Caption = SelectedItem.Text
frmChat.Show
End If
Case Else
Beep
End Select
End If
End Sub
</code>