Laden...

Forenbeiträge von api Ingesamt 10 Beiträge

13.05.2016 - 10:31 Uhr

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);

                }
            }
        }
13.04.2016 - 09:52 Uhr

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;
}
07.04.2016 - 10:34 Uhr

Danke für die Aufklärung. Werde mir überlegen, was mehr Sinn macht.

07.04.2016 - 10:15 Uhr

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)
15.09.2011 - 09:46 Uhr

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;
        }
15.09.2011 - 06:43 Uhr

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)

15.09.2011 - 01:39 Uhr

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);
		  
09.09.2011 - 07:08 Uhr

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.

08.09.2011 - 12:31 Uhr

Hallo,

danke für deine Antwort, verwende jedoch "late binding", kann darum deinen Code nicht verwenden. 🙁

08.09.2011 - 05:07 Uhr

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]);