| 

.NET C# Java Javascript Exception

0
Hi zusammen,
wie kann man folgenden code mit hilfe einer schleife verkürzen?
public void Lock()
{
ThisDocument myDoc = CTEST.Globals.ThisDocument;

myDoc.nameDoc.LockContents = true;
myDoc.phoneDoc.LockContents = true;
myDoc.faxDoc.LockContents = true;
myDoc.emailDoc.LockContents = true;
myDoc.akNrDoc.LockContents = true;
myDoc.akNrDoc1.LockContents = true;
myDoc.externTextDoc.LockContents = true;
myDoc.nameDoc1.LockContents = true;

myDoc.modDescrDoc.LockContents = true;
myDoc.modNameDoc.LockContents = true;
myDoc.modKPDoc.LockContents = true;
myDoc.modJWDoc.LockContents = true;
myDoc.dienstNrDoc.LockContents = true;
myDoc.dienstDescrDoc.LockContents = true;
myDoc.dienstKPDoc.LockContents = true;
myDoc.Prozent1.LockContents = true;
myDoc.Prozent2.LockContents = true;
}

ich dachte dabei die ganzen Feld-Namen in ein Array zu packen
String[] fields =  {"nameDoc","phoneDoc","faxDoc","emailDoc",...};

um sie dann so
myDoc.fields[x].LockContents = true;

in einer schleife zu verwenden, leider funktioniert das ganze nicht so ganz .

Danke für eure hilfe !

edit: die ganze methode gibt es auch noch als Unlock()
und mit felder waren PlainText-Felder gemeint,
diese sind mit namen versehen um sie über c# zu editieren.
News:
03.08.2011
DaTaBeRt 416 1 7
5 Antworten
2
Hallo DaTaBeRt,

soweit ich das in der MSDN sehe, hat das Fields-Interface des Word-Document keinen Indexer, der einen String akzeptiert. D.h. statt
String[] fields =  {"nameDoc","phoneDoc","faxDoc","emailDoc",...};

brauchst du die Indizes
int[] fields =  {nameDocIdx, phoneDocIdx, faxDocIdx, emailDocIdx,...};

Dann solltest Du in einer Schleife auch über
myDoc.fields[x].LockContents = true;
zugreifen können.

Soltest Du aber beabsichtigen, LockContents für alle Felder zu setzen, dann dürfte (laut MSDN) ein Aufruf
myDoc.Fields.Locked = true;
denselben Effekt haben und alle Felder in einem Rutsch sperren.

Viel Erfolg
Florian
03.08.2011
ffordermaier 8,4k 3 9
ok werd ich nach der mittagspause mal testen
DaTaBeRt 03.08.2011
1
Hallo,

wenn es da keine Collection von diesen Properties gibt dann könntest du das evtl. über Reflection machen.

D.h. du gibst den String Array mit den Variablen mit, holst dir für jeden das passende Property über Reflection und setzst dann den Wert auf true.

Das Ganze hat aber den Nachteil dass es zu Problemen kommt wenn du eine Variable umbenennst usw. weil dann stimmen deine Strings nicht mehr.

Falls du einfach alle Variablen auf true setzen, willst dann könntest du dir evtl. diesen String Array sparen und einfach alle Variablen mit Reflection auslesen.

Aber wie gesagt musst du da aufpassen :)

Gruß
Michael
03.08.2011
michlG 1,7k 1 5
Gleiche Idee :o)
Du warst schneller.
+1
Martin Fuchs 03.08.2011
hehe, danke.. Ich hab mich ja auch beeilt :)
michlG 03.08.2011
1
So etwas ist mit Reflection und der SetValue-Methode möglich.
03.08.2011
Martin Fuchs 1,4k 9
0
So ich bin beiläufig über eine Lösungsmöglichkeit gestolpert,
hier die Lösung:
ThisDocument d = meinDocument.Globals.ThisDocument;
PlainTextContentControl[] n = {d.nameDoc,d.phoneDoc,d.faxDoc,...};
int y = n.Length;
for (int x = 0; x < y; x++)
{
n[x].LockContents = true;
}
09.08.2011
DaTaBeRt 416 1 7
-1
(gelöscht)
03.08.2011
mupan 575 1 8
mupan 575 1 8
???
nein Textfeld = PlainText, keine TextBox.
und das ganze in c#.
DaTaBeRt 03.08.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH