mehrfache abfrage des status von kontrollelementen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

mehrfache abfrage des status von kontrollelementen

Beitrag von kannenklaus »

hallo gruppe

ich erstelle gerade ein basic-tool für mehrfaches suchen/ersetzen (6 su/er-paare). dabei belibt die status abfrage bei den mit cbx beginnenden kontollelemente ohne wirkung. d.h. es ist egal, ob ich ein häkchen drin habe oder nicht der austausch wird immer vorgenommen. ich kann den fehler nicht erkennnen.

Code: Alles auswählen

Sub dlgStartSuErMultiple 
	DialogLibraries.LoadLibrary("Standard")
	 
'--Dialog wird aufgerufen und angezeigt
	oDlg=CreateUnoDialog(DialogLibraries.Standard.dlgSuErMulitple) 'Dialog anlegen 
	oDlg.execute() 

'--1. Paar ermittelt die Suchen-Ersetzungspaare durch Abfrage der state-Eigenschaft und wendet je
'--nach Option den Suchen/Ersetzen-Vorgang in den selektierten Zellen oder allen Blättern an
	If oDlg.getControl("optSuErRange").state And oDlg.getControl("cbxSuEr1").state = 1 then
		Call SuErMultiple'bei der Option wird das Makro SuErMultiple aufgerufen 
	ElseIf oDlg.getControl("optSuErAlleBlaetter").state And oDlg.getControl("cbxSuEr1").state = 1 then
		Call SuErMultipleAlleBlaetter'bei der Option werden alle Blätter durchsucht	
freue mich auf eine antwort.

gruß

klaus
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Klaus,
ich kann den fehler nicht erkennnen.
Die If-Bedingungen!

Die State-Eigenschaft liefert int-Werte als Rückgabe, keine Boolschen Ausdrücke. Wenn du also abfragst:

Code: Alles auswählen

if oDlg.getControl("optSuErRange").state ...
Was erwartest du für ein Ergebnis? Das ist immer "True", egal, welche Stateigenschaft ausgegeben wird. Im zweiten Teil machst du es besser:

Code: Alles auswählen

... And oDlg.getControl("cbxSuEr1").state = 1 then 
Das Ergebnis des Ausdrucks "...state = 1" liefert entweder True oder False, also eine echte If-Bedingung.
Hier ansetzen!

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas

auch wenn ich state nach 1 abfrage wird immer der su/er-vorgang durchgeführt, ganz unabhängig davon, ob ein häkchen drin ist oder nicht.

Code: Alles auswählen

Option Explicit

	Dim oDlg as Object	



Sub dlgStartSuErMultiple 

	DialogLibraries.LoadLibrary("Standard")
	 
'--Dialog wird aufgerufen und angezeigt
	oDlg=CreateUnoDialog(DialogLibraries.Standard.dlgSuErMultiple) 'Dialog anlegen 
	oDlg.execute() 


Dim oConSel as Object
Dim oConAlleBlaetter as Object
oConSel = oDlg.getControl("optSuErRange").getModel()
oConAlleBlaetter = oDlg.getControl("optSuErAlleBlaetter").getModel()


'--1. Paar: ermittelt die Suchen-Ersetzungspaare durch Abfrage der state-Eigenschaft und wendet je
'--nach Option den Suchen/Ersetzen-Vorgang in den selektierten Zellen oder allen Blättern an
	If oConSel.state = 1 And oDlg.getControl("cbxSuEr1").state = 1 then
		Call SuErMultiple'bei der Option wird das Makro SuErMultiple aufgerufen 
	ElseIf oConAlleBlaetter.state = 1 And oDlg.getControl("cbxSuEr1").state = 1 then
		Call SuErMultipleAlleBlaetter'bei der Option werden alle Blätter durchsucht	
die alternative liefert das gleiche ergebnsi/fehler

Code: Alles auswählen

Option Explicit

	Dim oDlg as Object	



Sub dlgStartSuErMultiple 

	DialogLibraries.LoadLibrary("Standard")
	 
'--Dialog wird aufgerufen und angezeigt
	oDlg=CreateUnoDialog(DialogLibraries.Standard.dlgSuErMultiple) 'Dialog anlegen 
	oDlg.execute() 


	Dim oConSel as Object
	Dim oConAlleBlaetter as Object
	Dim oConSuEr1 as Object
	Dim oConSuEr2 as Object
	
	oConSel = oDlg.getControl("optSuErRange").getModel()
	oConAlleBlaetter = oDlg.getControl("optSuErAlleBlaetter").getModel()
	oConSuEr1 = oDlg.getControl("cbxSuEr1").getModel()
	oConSuEr2 = oDlg.getControl("cbxSuEr2").getModel()

'--1. Paar: ermittelt die Suchen-Ersetzungspaare durch Abfrage der state-Eigenschaft und wendet je
'--nach Option den Suchen/Ersetzen-Vorgang in den selektierten Zellen oder allen Blättern an
	If oConSel.state = 1 And oConSuEr1.state = 1 then
		Call SuErMultiple'bei der Option wird das Makro SuErMultiple aufgerufen 
	ElseIf oConAlleBlaetter.state = 1 And oConSuEr1.state = 1 then
		Call SuErMultipleAlleBlaetter'bei der Option werden alle Blätter durchsucht	
		
'--2. Paar ermittelt die Suchen-Ersetzungspaare durch Abfrage der state-Eigenschaft und wendet je
'--nach Option den Suchen/Ersetzen-Vorgang in den selektierten Zellen oder allen Blättern an		
	ElseIf oConSel.state = 1 And oConSuEr2.state = 1 then
		Call SuErMultiple'bei der Option wird das Makro SuErMultiple aufgerufen 
	ElseIf oConAlleBlaetter.state = 1 And oConSuEr2.state = 1 then
		Call SuErMultipleAlleBlaetter'bei der Option werden alle Blätter durchsucht	
wo liegt der fehler?

gruß klaus
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Klaus,
wo liegt der fehler?
Keine Ahnung - vielleicht im fehlenden Teil?

hier sieht alles gut aus. Du brauchst allerdings nicht das Model() - sondern den Control selbst! Ist aber wahrscheinlich auch egal - das ERgebnis dürfte das gleiche sein....
Also, ich hab deinen Code grob verviollständigt und getestet - funktioniert einwandfrei - so, wie er soll :D

Code: Alles auswählen

Dim oDlg as Object   



Sub dlgStartSuErMultiple

   DialogLibraries.LoadLibrary("Standard")
   
'--Dialog wird aufgerufen und angezeigt
   oDlg=CreateUnoDialog(DialogLibraries.Standard.dlgSuErMultiple) 'Dialog anlegen
   oDlg.execute()


Dim oConSel as Object
Dim oConAlleBlaetter as Object
oConSel = oDlg.getControl("optSuErRange")'.getModel()
oConAlleBlaetter = oDlg.getControl("optSuErAlleBlaetter")'.getModel()

msgbox "1: " & oDlg.getControl("cbxSuEr1").state & chr(13) & _
		"2: " &  oConSel.state & chr(13) & _
		"3: " & oConAlleBlaetter.state 


'--1. Paar: ermittelt die Suchen-Ersetzungspaare durch Abfrage der state-Eigenschaft und wendet je
'--nach Option den Suchen/Ersetzen-Vorgang in den selektierten Zellen oder allen Blättern an
   If oConSel.state = 1 And oDlg.getControl("cbxSuEr1").state = 1 then
      'Call SuErMultiple'bei der Option wird das Makro SuErMultiple aufgerufen
      msgbox "ch1 und ch2 = 1"
   ElseIf oConAlleBlaetter.state = 1 And oDlg.getControl("cbxSuEr1").state = 1 then
      'Call SuErMultipleAlleBlaetter'bei der Option werden alle Blätter durchsucht   
      msgbox "ch1 und ch3 = 1"
   else
      msgbox "nix"
   end if
end sub
Also, weiss nicht, was du sonst noch so tust :?:

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten