Ako vlozit text do MDI okna ?   zodpovězená otázka

VB.NET, WinForms

Toto je moj kod pre vkladanie textu z textboxov vo Form2 do richtextboxu vo Form1... Vsetko funguje tak ako ma

 If ChB1.Checked = True Then

                Form1.rtb1.Text = Form1.rtb1.Text & "CYCL DEF 200 VRTAT ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q200=" & Me.tb1.Text & "          ; BEZPEC. VZDIALENOST ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q201=" & Me.tb2.Text & "          ; HLBKA ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q206=" & Me.tb3.Text & "          ; POSUV PRISUVU DO HL. ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q202=" & Me.tb4.Text & "          ; HLBKA PRISUVU ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q210=" & Me.tb5.Text & "          ; CAS. VYDRZ HORE ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q203=" & Me.tb6.Text & "          ; SURADNICE POVRCHU ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q204=" & Me.tb7.Text & "          ; 2. BEZPEC. VZDIALENOST ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q211=" & Me.tb8.Text & "          ; CAS. VYDRZ DOLE ~"

            Else
                ChB2.Checked = True

                Form3.rtb1.Text = Form3.rtb1.Text & "G200 " & "Q200=" & Me.tb1.Text & "Q201=" & Me.tb2.Text & "Q206=" & Me.tb3.Text _
                & "Q202=" & Me.tb4.Text & "Q210=" & Me.tb5.Text & "Q203=" & Me.tb5.Text & "Q204=" & Me.tb5.Text

            End If

Ale ked chcem aby mi to iste urobilo aj vtedy ked pouzivam MDI Container tak uz to nefunguje... kod som upravil tak aby mi aktivovalo moje MDI okno ale stale bezuspesne... viete mi poradit v com robim chybu ??

Tu je kod po uprave s aktivaciou MDI okna

Dim Doc As Form3

        If Not IsNothing(Me.ActiveMdiChild) Then
            Doc = Me.ActiveMdiChild

            If ChB1.Checked = True Then

                Form1.rtb1.Text = Form1.rtb1.Text & "CYCL DEF 200 VRTAT ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q200=" & Me.tb1.Text & "          ; BEZPEC. VZDIALENOST ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q201=" & Me.tb2.Text & "          ; HLBKA ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q206=" & Me.tb3.Text & "          ; POSUV PRISUVU DO HL. ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q202=" & Me.tb4.Text & "          ; HLBKA PRISUVU ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q210=" & Me.tb5.Text & "          ; CAS. VYDRZ HORE ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q203=" & Me.tb6.Text & "          ; SURADNICE POVRCHU ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q204=" & Me.tb7.Text & "          ; 2. BEZPEC. VZDIALENOST ~"
                Form1.rtb1.Text = Form1.rtb1.Text & vbCrLf & "Q211=" & Me.tb8.Text & "          ; CAS. VYDRZ DOLE ~"

            Else
                ChB2.Checked = True

                Form3.rtb1.Text = Form3.rtb1.Text & "G200 " & "Q200=" & Me.tb1.Text & "Q201=" & Me.tb2.Text & "Q206=" & Me.tb3.Text _
                & "Q202=" & Me.tb4.Text & "Q210=" & Me.tb5.Text & "Q203=" & Me.tb5.Text & "Q204=" & Me.tb5.Text

            End If
        End If

        Close()

dakujem

nahlásit spamnahlásit spam 0 odpovědětodpovědět

teraz neviem ci Vam nefunguje nastavonanie rtb alebo ani MDI Container.

Nedavno som sa hral s MDI ,ale v C#.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

nevím, jestli jsem Váš dotaz či problém pochopil správně, pokud ne, pak mne, prosím, neukamenujte.

Předpokládám, že máte Form1 (nebo formulář, ze kterého spouštíte Váš kód, nadefinován jako isMdiContainer=true a ve Vašem formuláři Form3, který předpokládám chcete mít jako MdiChild máte nastaven mdiparent na správný formulář (Form1).

Otázkou je nyní, jak ten "Child" formulář otevřete.

Buď jej můžete otevřít přímým voláním Form3.show(), nebo, což asi bude pravděpodobnější, vytvoříte instanci formuláře Form3 a tu otevřete. Předpokládám tuto variantu jako pravděpodobnější, protože asi Mdi kontejner používáte proto, že v něm chcete mít více otevřených "Child" formulářů.

Takže takové ukázkové otevření (z Form1) by mohlo vypadat třeba takto:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim doc1 As New Form3
    doc1.Text = "Prvni instance Form3"
    doc1.Show()

    Dim doc2 As New Form3
    doc2.Text = "Druha instance Form3"
    doc2.Show()

    Form3.Show()
    Form3.Text = "Form3-public"
End Sub

Na zkoušku jsem si otevřel hned 3 stejné "Child" formuláře, aby byl efekt patrný.

Přestože jsou (vypadají) úplně stejně, úplně stejné nejsou - zvláště ten poslední.

Liší se v tom, že jeho název (Form3) je definován (v projektu) jako Public, takže jeho jmého znám i po vyskočení z předvedené iniciační metody.

Na rozdíl od tohoto, u prvních dvou Formů si deklaruji (ale jenom lokálně v metodě) pomocné instanční proměnné typu Form3 (klidně by mohly být pojmenovány i stejně - např. v cyklu) a poté, co Formuláře otevřu tyto jejich názvy okamžitě zapomenu (ukončením metody Load)

No a proč tento "dlouhý" úvod? Bohužel, ve svém textu neuvádíte, jak ty ChildFormy otevíráte.

Ale v úvodu tam přiřazujete do proměnné doc právě aktivní ChildForm, ale dál s touto proměnnou již nepracujete!?

Když si to zase pro názornost převedu do svého příkladu, dám si na ten svůj Form1 tlačítko a 3 textboxy, mohu pro tlačítko napsat následující_

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If Not IsNothing(Me.ActiveMdiChild) Then
            Dim doc As Form3 = Me.ActiveMdiChild

            doc.RichTextBox1.Text &= Me.TextBox1.Text
            doc.RichTextBox1.Text &= vbCrLf & Me.TextBox2.Text
            doc.RichTextBox1.Text &= vbCrLf & Me.TextBox3.Text
            Form3.RichTextBox1.Text &= vbCrLf & "---------------" & vbCrLf
        End If

A pokud si to vyzkoušíte, velice rychle zjistíte ten rozdíl.

Funguje to velice jednoduše:

Mám (v tomto případě) ve svém MdiContaineru 3 ChildFormy.

Nejprve testnu, je-li některý z nich aktivní a pokud ano, pak si odkaz na něj uložím do proměnné doc (která má typ Form3, ale s mým otevřeným Form3 kromě vzhledu nemá nic společného).

No a teď zapíšu hodnotu svých textboxů do RichtextBox1 na tom aktivním formuláři(nevím, který to je /neznám jeho jméno/, ale před chvílí jsem si odkaz na něj uložil do proměnné doc).

Ten poslední zápis se ale přímo odvolává na Formulář s názvem Form3, a jelikož je tento název definován jako globální a stejnojmenný formulář jsem si taky otevřel, tak píšu natvrdo do něj - ať mám jinak jako aktivní vybrán kterýkoliv z nich.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Velmi pekne dakujem za ochotu a za vycerpavajucu odpoved. Velmi si cenim takychto ludi.

Dnes som sa chvilu s mojim MDI programom v praci bavil a prisiel som presne na to v com som robil chybu a co mi teraz vy radite.

Pridavam moj kod:

Dim Doc As mdiForm
        ' Aktivuje MDI okno
        If Not IsNothing(mainForm.ActiveMdiChild) Then
            Doc = mainForm.ActiveMdiChild

            ' Kapsa Arrow vyskusana funguje
            Doc.rtb1.Text = Doc.rtb1.Text & "(MSG,""" & Me.tb_pozn.Text & """)"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & ":T" & Me.tb_nastroj.Text & "M6"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "(MSG,""" & Me.tb_poznNastroj.Text & """)"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "S" & Me.tb_otacky.Text & " M3"
            ' Suradnice
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G0 X" & Me.tb_X.Text & " Y" & Me.tb_Y.Text
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G92 X0 Y0"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G0 X0 Y0"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "Z2"
            ' Hlbky
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "[@HL]=" & Me.tb_HL.Text
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "[@PO]=" & Me.tb_PO.Text
            ' Skok
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "[SKOK" & dud_skok.Text & "]"
            ' Posuv zapichovanie
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G1 Z-[@HL] " & Me.tb_posuvZapich.Text & " M8"
            ' Suradnice priemeru - pracovny posuv
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G1 G41 X0 Y" & Me.tb_priemerOtvoru.Text / 2 & " F" & Me.tb_posuvPracovny.Text
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G3 P" & Me.tb_priemerOtvoru.Text / 2 & " X0 " & "Y-" & Me.tb_priemerOtvoru.Text / 2
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G3 P" & Me.tb_priemerOtvoru.Text / 2 & " X0 " & "Y" & Me.tb_priemerOtvoru.Text / 2
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G1 G40 X0 Y0"
            ' Koniec
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "[@HL]=[@HL]+[@PO]"
            ' Konecna hlbka
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "(IF [@HL]<=" & Me.tb_cielHlbka.Text & " GOTO [SKOK" & dud_skok.Text & "]"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G99"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "G0 Z150 M5"
            Doc.rtb1.Text = Doc.rtb1.Text & vbCrLf & "M0"


        End If

        Me.Close()

Chybu som robil presne tam ako vravite vy ked sa clovek troska viacej nad tym zamysli tak je to celkom jednoduche... Mne to trvalo cca 3 dni :)

Este raz Dakujem dufam ze aj ja budem raz taky dobry v programovani...

dodo

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nemáte zač děkovat - nejpřínosnější je, pokud jste na to nakonec přišel sám. I já stále jen začínám a tím, že se sem tam zkusím podívat na problém někoho jiného se sám učím (třeba s Mdi jsem zatím neměl potřebu pracovat).

Ještě Vás poprosím - pro přehlednost, pokud je tímto Vaše otázka zodpovězena, označte vlákno jako zodpovězené. Pěkný večer.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback