Hallo
In einem DataGridView wird ein Bild in einer Spalte angezeigt.
Wie kann ich festlegen, dass z.B. weiß transparent dargestellt wirdl?
private System.Drawing.Image GetStatusImage(int Status)
{
System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
string ressourceName = "";
switch (Status)
{
case 0:
ressourceName = "Ressources.started.png";
break;
case 1
ressourceName = "Ressources.paused.png";
break;
}
System.IO.Stream file = thisExe.GetManifestResourceStream(ressourceName);
return Image.FromStream(file);
}
private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (!dataGridView.Rows[e.RowIndex].IsNewRow)
{
if (dataGridView.Columns[e.ColumnIndex].Name == "Icon")
{
e.Value = GetStatusImage((int)dataGridView.Rows[e.RowIndex].Cells["Status"].Value);
}
}
}
Hallo,
mit folgender Funktion überprüfe ich, ob eine DataColumn einen "ForeignKeyConstraint" hat.
Nun müsste ich diesen Code
constraint.Columns.Contains(column)
on Linq schreiben, da dieser Namespace in einer Scriptengine nicht zur Verfügung steht.
Wie schreibe ich das am einfachsten um?
private static bool ColumnIsForeignKey(DataColumn column)
{
// Ensure a valid column was received that actually belongs to a table
if (column == null)
throw new ArgumentNullException("column");
if (column.Table == null)
throw new ArgumentException("Column provided must belong to a table", "column");
bool hasForeignKey = false;
// Loop through ALL constraints
int counter = 0;
while ((!hasForeignKey) && (counter < column.Table.Constraints.Count))
{
// Filter to only ForeignKeyConstraints that include the column we were given
ForeignKeyConstraint constraint = column.Table.Constraints[counter] as ForeignKeyConstraint;
if ((constraint != null) && (constraint.Columns.Contains(column)))
{
hasForeignKey = true;
}
counter++;
}
return hasForeignKey;
}
Danke für die Aufklärung. Werde mir überlegen, was mehr Sinn macht.
Hallo
eine Funktion SetAppBar erwartet ein Parameter vom Typ System.Windows.Window.
Wie kann ich dieser meine Form übergeben, welche vom Typ Form System.Windows.Forms.Form ist?
public static void SetAppBar(Window appbarWindow, ABEdge edge)
Habe es nun geschafft. Wie muss man das comObj wieder freigeben?
public ComObject InvokeObjectReturningFunction(string functionName, params object[] parameters)
{
for(int i=0; i<parameters.Length;i++)
{
if( parameters[i] is ComObject)
{
ComObject comObj = parameters[i] as ComObject;
if (null != comObj)
parameters[i] = comObj;
}
}
// Methode aufrufen
object result = _realComObject.GetType().InvokeMember(functionName, BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, _realComObject, parameters);
// Wenn ein Objekt zurückgegeben wurde ...
if (result != null)
// Rückgabeobjekt in Wrapper einpacken und zurückgeben
return new ComObject(result);
// Nichts zurückgeben
return null;
}
Hallo Sebastian,
Habe mal InvokeObjectReturningFunction nach deinem Vorschlag erweitert. Erhalte jedoch eine Fehlermeldung:
public ComObject InvokeObjectReturningFunction(string functionName, params object[] parameters)
{
for(int i=0; i<parameters.Length;i++)
{
if( parameters[i] is ComObject)
parameters[i] = parameters[i].RealComObject;
}
Fehlermeldung:
'object' does not contain a definition for 'RealComObject' and no extension method 'RealComObject' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
(Zudem wurde das public object RealComObject deklariert)
Hallo,
Versuche mit dem COM-Wrapper für Späte Bindung einen Outlook Termin zu setzen. Funktioniert soweit alles, der Termin wird gesetzt.
Nun möchte ich jedoch in einem anderen Kalender den Termin setzen. Dazu brauche ich die Funktion GetSharedDefaultFolder. Jedoch erhalte ich auch eine Fehlermeldung:
"System.InvalidCastException: The operation failed."
Vermutlich ist es ganz einfach zu lösen, programmiere jedoch erst 2 Wochen in C#, bin deshalb noch nicht sattelfest. Vielleicht gibt es sonst noch Optimierungen im Code?
(PS: Muss "Späte Bindung" verwenden, NetOffice kann ich leider nicht verwenden)
int olFolderCalendar = 9;
int olMailItem = 0;
int olAppointmentItem = 1;
ComObject objOutlook = new ComObject("Outlook.Application");
ComObject objNS = objOutlook.InvokeObjectReturningFunction("GetNamespace", "MAPI");
ComObject objDummy = objOutlook.InvokeObjectReturningFunction("CreateItem", olMailItem);
ComObject objRecip = objDummy.InvokeObjectReturningFunction("Recipients");
ComObject objRecipAdd = objRecip.InvokeObjectReturningFunction("Add", "e-mail-adresse@xyz.com");
objRecipAdd.InvokeProcedure("Resolve");
if ((bool)objRecipAdd.InvokeFunction("Resolved"))
{
ComObject objFolder = objNS.InvokeObjectReturningFunction("GetDefaultFolder", olFolderCalendar);
// ComObject objFolder = objNS.InvokeObjectReturningFunction("GetSharedDefaultFolder", objRecipAdd, olFolderCalendar);
// <-- Fehler wenn "GetSharedDefaultFolder" aufgerufen wird
if (objFolder != null)
{
ComObject objApptItem = objFolder.InvokeObjectReturningFunction("Items");
ComObject objAppt = objApptItem.InvokeObjectReturningFunction("Add", olAppointmentItem);
if (objAppt != null)
{
objAppt.SetProperty("Subject","Subject...");
// etc...
objAppt.InvokeProcedure("Save");
}
objAppt.Dispose();
objApptItem.Dispose();
}
objFolder.Dispose();
}
objRecipAdd.Dispose();
objRecip.Dispose();
objNS.Dispose();
objOutlook.Dispose();
}
}
Edit: Habe noch das probiert, jedoch ohne Erfolg:
object[] Parameters;
Parameters = new Object[2];
Parameters[0] = objRecipAdd;
Parameters[1] = olFolderCalendar;
ComObject objFolder = objNS.InvokeObjectReturningFunction("GetSharedDefaultFolder", Parameters);
Danke Sebastian, funktioniert so perfekt. Musste nur noch eine Kleinigkeit ändern: BindingFlags.GetProperty zu BindingFlags.SetProperty zum Setzen des Wertes.
Werde mir das NetOffice mal näher anschauen, das würde das ganze natürlich sehr vereinfachen.
Hallo,
danke für deine Antwort, verwende jedoch "late binding", kann darum deinen Code nicht verwenden. 🙁
Hallo,
Ich möchte in einem Word Dokument automatisch Formular Checkboxen anhaken (late binding)
In VBA geht es so:
ActiveDocument.FormFields("meineCheckbox").CheckBox.Value = True
Mir ist schon gelungen, alle Felder aufzulisten. Nun brauche ich noch Zugriff auf die Checkboxen, jedoch habe ich keine Idee wie das geht (schon viel gegoogelt, jedoch ohne fündig zu werden)
Kann mir da jemand weiterhelfen?
object objWord, objDoc;
Type typWord = Type.GetTypeFromProgID("Word.Application");
objWord = Activator.CreateInstance(typWord);
objDoc = objWord.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, objWord, null);
object[] docPar = new object[4];
docPar[0] = @"C:\test_.doc";
docPar[1] = Type.Missing;
docPar[2] = Type.Missing;
docPar[3] = Type.Missing;
object objDocu = objDoc.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, objDoc, docPar);
object formFields = objDocu.GetType().InvokeMember("FormFields", BindingFlags.GetProperty, null, objDocu, null);
int count = (int)formFields.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, formFields, null);
string fieldValue=string.Empty;
for(int i=1; i<=count; i++)
{
object field = formFields.GetType().InvokeMember("Item", BindingFlags.GetProperty | BindingFlags.Default | BindingFlags.InvokeMethod , null, formFields, new object[]{i});
fieldValue = (string) field.GetType().InvokeMember("Name", BindingFlags.GetProperty | BindingFlags.Default | BindingFlags.InvokeMethod , null, field, null);
MessageBox.Show(fieldValue, "fieldValue", MessageBoxButtons.OK);
}
typWord.InvokeMember("Quit", BindingFlags.IgnoreCase | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.OptionalParamBinding, null, objWord, new object[0]);