Hej! Hej Fredrik! Precis! Där sa du nått! Jag lägger till lite kod oxå... Ett hett tips är annars att använda ActiveMdiChild på MdiContainern... ;) Japps hittade detta sedan. Men forfarande är det trubbel! Du måste casta den till din formulärtyp, kommer inte ihåg hur man gör det i VB.NET, kanske såhär? mmm! Det där fungerar faktiskt! Förutom att Option strict klagar enligt: Stäng inte av option strict!!! Nej... detta vågar jag absolut inte.. Men ibland så provar jag bara en snabbis för att "se vad som händer" Dåså, Var det dags att validera den här tråden som löst.MDIParentkontroller för att styra Barnen
Har provat göra lite olika sorters texteditorer.
Nu vill jag prova göra den med hjälp av MDIparent True på huvudformuläret. I detta så skapas barn när man tex skapar en ny fil från menyn.
Vidare är det så att på MDIParent fönstret så har jag satt en toolbar. Toolbaren har funktioner som att göra text till fetstil osv. Men Jag vet inte hur jag skall få just de här funktionerna att refereras till ett barnfönster? Funktionerna som har hand om textformatering ligger i en egen fil (clsTxtformatering.vb) vidare har jag ytterligare en klassfil (clsFilhantering.vb) Båda skall ju "nås" och verktygen skall ju hantera de för stunden "aktiva" barnfönstret.
Vidare så vill jag veta vad ni anser om detta: Är det lämpligast att använda sig av Textbox, eller är det bättre att använda richtextbox? Hittils har jag bara kört med de sistnämnda, är detta "rätt"? För mig är textboxkontrollen till för lite mindre inmatningar? Vad är vinster/förluster mellan de olika kontrollerna?Sv: MDIParentkontroller för att styra Barnen
Först TextBox Vs. RichTextBox:
RichTextBox tillåter att man använder sig av flera färger, fonter, storlekar mm.
sen en fråga:
Hur vet Parent-formuläret vilket child-formulär som är aktivt?
Den förlorar ju focus när du klickar på toolbaren?
Har inte jobbat så mycket med mdi, men du kan ju alltid ha en flagga i en
modul som representerar "senast aktiva child"Sv:MDIParentkontroller för att styra Barnen
Jag skriver en public property som sätter en variabel till ett värde som representerar barnets "identifikationsnummer".
Nästa fråga... _vad_ är barnets "identifikationnummer" - vilken egenskap är det jag skall använda för det?
EDIT:
Lägger till lite mer här.
Det finns ju två olika events man skulle kunna använda. (för Child Formuläret nu då)
Det ena är "Me.GotFocus" eller "Me.LostFocus". Finns det någon rekommendation på vilken man "bör" använda i det här fallet. Jag ser det som att det är den förstnämnda man skall använda? För om jag sätter en variabel till ett värde varje gång ett barn FÅR focus - så är det detta som skall gälla sedan (tills någon annan får focus). Om vi har scenariot: två barn i en MDI och vi använder "lost focus" så kommer ju inte den "nuvarande" vara lagrad i "senast aktiv"-propertyn - utan den "förra"? Men använder man Lost focus i variabeln så kommer ju den "tidigare" vara lagrad.
Jag har tidigare när jag velat använda en variabel globalt inom en klass använt Private shared osv... Är detta ett bra sätt att uppnå detta? Eller underkastar man vid en sån här programering finessen med att "kapsla in" osv?Sv: MDIParentkontroller för att styra Barnen
Här kommer det som ligger i clsChildForm.vb (dock bara den händelse som avses, om jag använt fel händelse berätta gärna det :))
Private Sub clsChildForm_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus
clsChildHantering.SenastAktiv = Me.ActiveMdiChild
End Sub
Då passar det bra att titta vad som händer i clsChildHantering.SenastAktiv: (Ligger i clsChildHantering.vb)
Public Class clsChildHantering
Private Shared _strSenastAktiv As System.Windows.Forms.Form
Public Shared Property SenastAktiv() As System.Windows.Forms.Form
Get
Return _strSenastAktiv
End Get
Set(ByVal value As System.Windows.Forms.Form)
_strSenastAktiv = value
End Set
End Property
End Class
För att sedan ta en funktion som ligger i textpadens "huvudfönsters" toolbar. Nämligen den funktionen som skall göra den markerade texten i de senast aktiva barnfönstrets rika textbox till fet respektive Kursiv stil.
Jag har provat lite här. Med att försöka komma åt "senast_aktiv" och därigenom rätt rika textbox. Men har inte lyckats. I koden här nedan så är anropen som annars fungerar då man har en textruta i samma formulär så att säga.
Private Sub TSbtnFet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TSbtnFet.Click
Dim objMarkering As New clsTxtFormatering
'rtbTxtArea.SelectionFont = objMarkering.AndraFontStil(rtbTxtArea.SelectionFont, rtbTxtArea.SelectionFont.Style, FontStyle.Bold)
End Sub
Private Sub TSbtnI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSbtnI.Click
Dim objMarkering As New clsTxtFormatering
'rtbTextArea.SelectionFont = objMarkering.AndraFontStil(rtbTextArea.SelectionFont, rtbTextArea.SelectionFont.Style, FontStyle.Italic)
End Sub
Frågan är då. Hur når jag den senast aktiva textboxens textmarkering?
Sv:MDIParentkontroller för att styra Barnen
/JohanSv: MDIParentkontroller för att styra Barnen
Jag får den inte att förstå att det är en richtextbox (som har en hel del andra propertys)?
Det närmsta jag kommer är:
ActiveMdiChild.ActiveControl.Text = "Snusdosa"
Då skriver den ut Snusdosa på kontrollen...Men jag får inte tag i "SelectionFont" som jag behöver i min funktion.Sv:MDIParentkontroller för att styra Barnen
Dim AktivtMDIChild As MinMDIChildFormulKlass = ActiveMdiChild
Sedan kan du använda:
AktivtMDIChild.MinRichTextKontroll.Text = "Snusdosa"
/JohanSv: MDIParentkontroller för att styra Barnen
Error 1 Option Strict On disallows implicit conversions from 'System.Windows.Forms.Form' to 'WindowsApplication1.clsChildForm'.
Men stänger jag av OP strict så fungerar det.Sv:MDIParentkontroller för att styra Barnen
Använd CType istället..Sv: MDIParentkontroller för att styra Barnen
CType... Tackar.. skall prova med denSv:MDIParentkontroller för att styra Barnen
Men sammanfattar här lösningen:
'kräver option strict off
Dim AktivtMDIChild As MinMDIChildFormulKlass = ActiveMdiChild
AktivtMDIChild.MinRichTextKontroll.Text = "Snusdosa"
Ovan fungerar som sagt. Men skall man använda option strict=On så är det inte påpulärt med den dimmensioneringen.
Denna bör istället vara enligt:
Option strict on
Dim AktivtMDIChild As MinMDIChildFormulKlass = CType(ActiveMdiChild, MinMDIChildFormulKlass)
AktivtMDIChild.MinRichTextKontroll.Text = "Snusdosa"
Tackar för hjälpen.