von Ibanez » Mo, 01.09.2008 12:03
Ich habe es fast
Ich habe noch ein Textfeld eingefügt, dass man bei Auswahl 2 ausfüllen soll. Problem ist, dieses Textfeld wird beim Start des Dialogs nicht ausgelesen. Schreibe ich was hinein wird es sobald ich auch den "Zurück" button klicke und wieder auf den "Weiter" klicke sowohl auf dem Dokument, als auch im Dialog angezeigt. Speichere ich das Dokument, öffne es erneut und klicke weiter bis zu dem Dialog mit der besagten Abfrage, dann steht im Textfeld nichts mehr, wobei es auf dem Dokument noch zu sehen ist. Ich verstehe es nicht und sehe auch keinen Fehler.
Jemand eine Ahnung warum?
Ich benutze 2 Dialoge. Dlg_FB besteht nur aus Textfeldern, die vorher abgefragt werden. Dlg_P1 besteht aus den OptionsButton und einem Textfeld ("TextField_Name). Die Buttons "Zurück", "Weiter" und "Fertig" sind mit den Makros "cbBackP1", "cbForeP1" und "cmd_OKP1" belegt.
Code: Alles auswählen
Dim myDialog as Object
Dim Opt_Btn_1_State as String
Dim Opt_Btn_2_State as String
Dim String_Name as String
Dim Opt_Btn_1 as Object
Dim Opt_Btn_2 as Object
Dim TxtName as String
Sub Dlg_P1
DialogLibraries.loadLibrary("Standard")
oForm = DialogLibraries.Standard.Dlg_P1
myDialog = CreateUnoDialog(oForm)
myDialog.title = "Options Button"
Opt_Btn_1 = myDialog.getControl("OptionButton1")
Opt_Btn_1.model.Label = "Auswahl1"
Opt_Btn_2 = myDialog.getControl("OptionButton2")
Opt_Btn_2.model.Label = "Auswahl2"
Ctl_Name = myDialog.GetControl("TextField_Name")
Ctl_Name.Model.Text = String_Name
Ctl_Name.setfocus()
Read_SettingsP1
myDialog.execute()
myDialog.Dispose()
End Sub
Sub Read_SettingsP1
oDoc = thisComponent
strUserfield_Mit = "Name"
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_Name
String_NameMit = oTextFieldMasters.getByName(TxtUserfield_Name).content
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform = odoc.drawpage.forms.getbyindex(0)
CtrlCheckBox1 = oForm.getByName("CheckBox1")'Achtung: Namen anpassen
CheckBox1_State=CtrlCheckBox1.state
CtrlCheckBox2 = oForm.getByName("CheckBox2")'Achtung: Namen anpassen
CheckBox2_State=CtrlCheckBox2.state
if CheckBox1_State = 1 and CheckBox2_State = 1 Then
msgbox "Es sind zwei Checkboxen angewählt"& CHR(13)& "Welcher Optionsbutton soll denn jetzt angewählt werden?" ,48, "Grober Fehler!"
Exit sub
end if
if CheckBox1_State = 1 Then
Opt_Btn_1.State = 1
end if
if CheckBox2_State = 1 Then
Opt_Btn_2.State = 1
end if
End Sub
Sub Formularfelder_ansprechenP1
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform = odoc.drawpage.forms.getbyindex(0)
CtrlCheckBox1 = oForm.getByName("CheckBox1")'Achtung: Namen anpassen
CheckBox1_State=CtrlCheckBox1.state
oKView = oController.getControl(CtrlCheckBox1)
CtrlCheckBox2 = oForm.getByName("CheckBox2")'Achtung: Namen anpassen
oKView = oController.getControl(CtrlCheckBox2)
Opt_Btn_1 = myDialog.getControl("OptionButton1")
Opt_Btn_1_State=Opt_Btn_1.state
Opt_Btn_2 = myDialog.getControl("OptionButton2")
Opt_Btn_2_State=Opt_Btn_2.state
if Opt_Btn_1_State = "True" then
CtrlCheckBox1.State= 1
CtrlCheckBox2.State= 0
else
CtrlCheckBox1.State= 0
CtrlCheckBox2.State= 1
end if
if Opt_Btn_1_State = "False" and Opt_Btn_2_State = "False" then
CtrlCheckBox1.State= 0
CtrlCheckBox2.State= 0
end if
myDialog.endexecute()
End Sub
Sub Felbefehl_schreibenP1
oDoc = thisComponent
strUserfield_Name = "Name"
Ctl_Name = myDialog.GetControl("TextField_Name")
String_Name = Ctl_Name.Model.Text
strContent_Name = String_Name
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_Name
oTextFieldMasters.getByName(TxtUserfield_Name).content = StrContent_Name
oDoc.getTextFields().refresh()
myDialog.endexecute()
End Sub
sub schflaeche_cbBackP1
Felbefehl_schreibenP1
Dlg_FB4
End sub
Sub schflaeche_cbForeP1
Felbefehl_schreibenP1
Dlg_P1
Felbefehl_lesenP1
End sub
Sub schflaeche_cmd_okP1
Felbefehl_schreibenP1
Formularfelder_ansprechenP1
End Sub

Ich habe es fast :?
Ich habe noch ein Textfeld eingefügt, dass man bei Auswahl 2 ausfüllen soll. Problem ist, dieses Textfeld wird beim Start des Dialogs nicht ausgelesen. Schreibe ich was hinein wird es sobald ich auch den "Zurück" button klicke und wieder auf den "Weiter" klicke sowohl auf dem Dokument, als auch im Dialog angezeigt. Speichere ich das Dokument, öffne es erneut und klicke weiter bis zu dem Dialog mit der besagten Abfrage, dann steht im Textfeld nichts mehr, wobei es auf dem Dokument noch zu sehen ist. Ich verstehe es nicht und sehe auch keinen Fehler.
Jemand eine Ahnung warum?
Ich benutze 2 Dialoge. Dlg_FB besteht nur aus Textfeldern, die vorher abgefragt werden. Dlg_P1 besteht aus den OptionsButton und einem Textfeld ("TextField_Name). Die Buttons "Zurück", "Weiter" und "Fertig" sind mit den Makros "cbBackP1", "cbForeP1" und "cmd_OKP1" belegt.
[code]
Dim myDialog as Object
Dim Opt_Btn_1_State as String
Dim Opt_Btn_2_State as String
Dim String_Name as String
Dim Opt_Btn_1 as Object
Dim Opt_Btn_2 as Object
Dim TxtName as String
Sub Dlg_P1
DialogLibraries.loadLibrary("Standard")
oForm = DialogLibraries.Standard.Dlg_P1
myDialog = CreateUnoDialog(oForm)
myDialog.title = "Options Button"
Opt_Btn_1 = myDialog.getControl("OptionButton1")
Opt_Btn_1.model.Label = "Auswahl1"
Opt_Btn_2 = myDialog.getControl("OptionButton2")
Opt_Btn_2.model.Label = "Auswahl2"
Ctl_Name = myDialog.GetControl("TextField_Name")
Ctl_Name.Model.Text = String_Name
Ctl_Name.setfocus()
Read_SettingsP1
myDialog.execute()
myDialog.Dispose()
End Sub
Sub Read_SettingsP1
oDoc = thisComponent
strUserfield_Mit = "Name"
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_Name
String_NameMit = oTextFieldMasters.getByName(TxtUserfield_Name).content
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform = odoc.drawpage.forms.getbyindex(0)
CtrlCheckBox1 = oForm.getByName("CheckBox1")'Achtung: Namen anpassen
CheckBox1_State=CtrlCheckBox1.state
CtrlCheckBox2 = oForm.getByName("CheckBox2")'Achtung: Namen anpassen
CheckBox2_State=CtrlCheckBox2.state
if CheckBox1_State = 1 and CheckBox2_State = 1 Then
msgbox "Es sind zwei Checkboxen angewählt"& CHR(13)& "Welcher Optionsbutton soll denn jetzt angewählt werden?" ,48, "Grober Fehler!"
Exit sub
end if
if CheckBox1_State = 1 Then
Opt_Btn_1.State = 1
end if
if CheckBox2_State = 1 Then
Opt_Btn_2.State = 1
end if
End Sub
Sub Formularfelder_ansprechenP1
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform = odoc.drawpage.forms.getbyindex(0)
CtrlCheckBox1 = oForm.getByName("CheckBox1")'Achtung: Namen anpassen
CheckBox1_State=CtrlCheckBox1.state
oKView = oController.getControl(CtrlCheckBox1)
CtrlCheckBox2 = oForm.getByName("CheckBox2")'Achtung: Namen anpassen
oKView = oController.getControl(CtrlCheckBox2)
Opt_Btn_1 = myDialog.getControl("OptionButton1")
Opt_Btn_1_State=Opt_Btn_1.state
Opt_Btn_2 = myDialog.getControl("OptionButton2")
Opt_Btn_2_State=Opt_Btn_2.state
if Opt_Btn_1_State = "True" then
CtrlCheckBox1.State= 1
CtrlCheckBox2.State= 0
else
CtrlCheckBox1.State= 0
CtrlCheckBox2.State= 1
end if
if Opt_Btn_1_State = "False" and Opt_Btn_2_State = "False" then
CtrlCheckBox1.State= 0
CtrlCheckBox2.State= 0
end if
myDialog.endexecute()
End Sub
Sub Felbefehl_schreibenP1
oDoc = thisComponent
strUserfield_Name = "Name"
Ctl_Name = myDialog.GetControl("TextField_Name")
String_Name = Ctl_Name.Model.Text
strContent_Name = String_Name
On Error Resume Next
oTextFieldMasters = oDoc.TextFieldMasters
TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_Name
oTextFieldMasters.getByName(TxtUserfield_Name).content = StrContent_Name
oDoc.getTextFields().refresh()
myDialog.endexecute()
End Sub
sub schflaeche_cbBackP1
Felbefehl_schreibenP1
Dlg_FB4
End sub
Sub schflaeche_cbForeP1
Felbefehl_schreibenP1
Dlg_P1
Felbefehl_lesenP1
End sub
Sub schflaeche_cmd_okP1
Felbefehl_schreibenP1
Formularfelder_ansprechenP1
End Sub
[/code]
[img]http://www.bockrock.de/images/Dlg.jpg[/img]