Laden...

Forenbeiträge von Nokinger Ingesamt 48 Beiträge

26.11.2014 - 20:58 Uhr

Hallo herbivore,

danke für die Ausführliche Antwort.
Also vorne weg, mit diesem Ausdruck von dir bin ich Glücklich geworden (es können mehr als 3 Blöcke sein, von daher habe ich das mal angepasst):

(?s)(?i)(?:\s?ABC\s*:(?:(?!-{50}).)*-{50}((?:(?!-{50}).)*)-{50})

Und ja so wie du es beschrieben hast, mache ich es generell auch ganz gerne. Also Schritt für Schritt. Mithilfe des Realtime Mechanismus der Verschiedenen Regex Tester sieht man ja direkt sein resultat.

Mit Positive Lookahead habe ich mich heute auch schon probiert, ebenfalls mit der Klammerung um den gesamten ausdruck, jedoch ohne erfolg.

Was ich jedoch bei dem Ausdruck von dir nicht Verstehe ist folgendes:
Warum Funktioniert das ganze wenn ich den Negativen Lookahead vor dem "." Any character setzte?
Also damit meine ich folgender Part: "(?!-{50}.)" Ich hätte gedacht das dieser Ausdruck wie folgt lauten muss **(?!.-{50}) **jedoch funktioniert es dann leider nicht 😃

Hallo zoomi,

mit so einem ähnlichen Ausdruck habe ich es heute auch schon versucht, jedoch mit der ausnahme das ich den Header nicht als Positive LookBehind gesetzt habe.
Jedoch wenn ich deinen Ausdruck Verwende erhalte ich 6 Matches: 3 für die Header und 3 für die Texte.

Das ist der Ausdruck von zoomi wobei ich Singleline daraus gemacht habe dann werden die New line States auch durch den "." Character akzeptiert:

(?s)(?<=ABC\s:.*[-]{50})(?:.*?)*?(?=[-]{50})

Auch hier Verstehe ich nicht warum der Postive LookBehind also der Header jetzt auch ein Match ist.

Gruß
Nokinger

26.11.2014 - 18:35 Uhr

Hallo Coffeebean,

ich habe nicht direkt diesen Regex Tester genutzt. Jedoch einen anderen:
Rad Software Regular Expression Designer

Und noch ein paar Online Regex Tester usw.

Jedoch helfen die mir ja nicht bei meinem Problem weiter.

ich bräuchte einen Regex Guru der mir ein bisschen auf die Sprünge hilft.

gruß
Nok

26.11.2014 - 17:02 Uhr

Hallo,

ich habe folgenden Text:

Blubber ganz viel Text hier 
Asdads aldskla dlaö döla öldaödlsad
aädöaädöaösd äsdaäsdöaädö
--------------------------------------------------
 ABC : Header Name
--------------------------------------------------
[color]
 Ein Paar Zeilen mit Inhalt meist beginnend mit 
 Leerzeichen.
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
[/color]
--------------------------------------------------
 ABC : Header Name
--------------------------------------------------
[color]
 Ein Paar Zeilen mit Inhalt meist beginnend mit 
 Leerzeichen.
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
[/color]
--------------------------------------------------
 ABC : Header Name
--------------------------------------------------
[color]
 Ein Paar Zeilen mit Inhalt meist beginnend mit 
 Leerzeichen.
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
 Eine Weitere Textzeile
[/color]
--------------------------------------------------

Nun möchte ich jedoch eine MatchCollection haben, die mir die 3 Blöcke beginnend mit ABC zurückliefen. Wobei mich jeweils nur der Inhalt (hab diesen mal Grün Dargestellt) zwischen den Trennlinien interessiert.

Dazu habe ich einen Regex Pattern welcher prinzipiell funktioniert:

(?i)\s?ABC\s*[:].*[-]{50}((?:\s*.*[^-]{50})*)[-]{50}

Dieser Pattern hat jedoch den Nachteil, das wenn der "Inhalt" eines TextBlocks z.B aus nur einer Kurzen Zeile besteht, dass dieser Block dann nicht Match und ich somit nur 2 Matches erhalte. Liegt an diesem Ausdruck "[^-]{50}"

Also dachte ich mir den Ausdruck kann ich doch viel einfacher gestalten:

(?s)(?i)ABC\s*[:].*[-]{50}((?:.)*?)[-]{50}

Dieser Pattern hat jedoch den Nachteil, dass er nur einen Match zurückliefert mit einer Gruppe, worin der "Inhalt" vom letzten Block enthalten ist.

Kann mir diesbezüglich jemand helfen?
Sodass ich eine MatchCollection bekomme mit 3 Matches und es egal ist, wie viel Text zwischen den Gestrichelten Linien ist.

Nokinger

Edit: Im ersten Pattern ist ein Fehler rein gewandert. Hab ich nun Korrigiert

22.07.2014 - 16:50 Uhr

Hallo Erdbaer,

welche Visual Studio Version hast du denn?

Das ganze ist ein bekannter Bug in der VS2012 Version. Mit dem Update 2 von VS2012 wurde das Thema behoben.

Debugging on remote server with vs2012 fails, with vs2010 it works, same configuration. Error: "Internal error in the expression evaluator."

Wenn du dein VS2012 Aktualisiert hast darfst du nicht Vergessen dein RemoteDebugger Programm auf dem Zielsystem ebenfalls zu Aktualisieren.

Edit:
Args Sorry .... da war ich zu langsam 😃

22.04.2014 - 12:15 Uhr

Hallo Robin0,

an der Signatur an sich konnte es nicht liegen, da ja nicht Arrays und Eindimensionale Arrays wunderbar funktioniert haben.

Jedoch bin ich gerade auf einen Interessanten Beitrag bei Microsoft gestoßen
KB960240: PRB: .NET Multidimensional arrays emitted by Reflection do not match compiled arrays

Darin wird beschrieben das dass Emitten von mehrdimensionalen Arrays noch einen Bug hatte, welcher erst mit dem Framework 4 scheinbar behoben wurde.

Ich habe das ganze auch getestet ... mit Framework 4 funktioniert das ganze tatsächlich 😃

Nun muss ich mit dem Kooperationspartner Sprechen ob es für ihn ein Problem ist wenn wir auf das Framework 4.0 Umstellen. Da wir im Anlagenbau sind und dort die Softwareverteilung manchmal etwas Schwieriger ist... aber das bekomme ich dann auch noch hin.

Trotzdem danke für dein Feedback!

17.04.2014 - 19:11 Uhr

Hallo,

ich habe mir etwas geschrieben das zur Laufzeit eine Implementierung eines Interfaces mithilfe von Reflection Emit erstellt. Das ganze funktioniert auch wunderbar mit der Ausnahme das mehrdimensionale arrays nicht funktionieren. Eindiemnsionale Arrays dagegen gehen wunderbar.

void GenerateDataVarGetter(Type interfaceType,TypeBuilder builder, PropertyInfo property)
{
	MethodInfo getMethod = property.GetGetMethod();
	if (getMethod == null)
		return;

	const MethodAttributes attributes = MethodAttributes.Public |  MethodAttributes.Virtual |
		MethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.SpecialName;

	Type t = property.PropertyType;
	MethodInfo baseMethod = typeof(DynamicStubClass).GetMethod("GetValue",BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(t);

//Die baseMethod sieht wie folgt aus (exemplarische darstellung):
// public T GetValue<T>(string propName)
// {
//      ...
//      return (T)value;
//  }
//Diese Methode wird in der Basis Klasse DynamicStubClass Implementiert.
//Jeder Typ den ich zur laufzeit erstelle wird von dieser Basis Klasse //abgeleitet und Implementiert eben das interface für das zur laufzeit eine //Klasse erstellt werden soll

	string methodName = string.Format("{0}.{1}", interfaceType.Name, getMethod.Name);
	MethodBuilder method = builder.DefineMethod(methodName, attributes, t, Type.EmptyTypes);

	string propertyName = string.Format("{0}.{1}", interfaceType.Name, property.Name);
	PropertyBuilder propertyBuilder = builder.DefineProperty(propertyName, PropertyAttributes.None, t, null);
	
	ILGenerator il = method.GetILGenerator();
	il.Emit(OpCodes.Ldarg_0);
	il.Emit(OpCodes.Ldstr, property.Name); //string parameter für die baseMethod
	il.Emit(OpCodes.Callvirt, baseMethod);
	il.Emit(OpCodes.Ret);

	builder.DefineMethodOverride(method, getMethod);
	propertyBuilder.SetGetMethod(method);
}

Gegeben ist folgendes Interface:


public interface TestInterface
{
     IDataVar<short>[,] TestProperty {get;}
}

beim erstellen des Types also mit:

TypeBuilder.CreateType()

Erhalte ich folgende Fehlermeldung: > Fehlermeldung:

Die Signatur für den Text und die Deklaration in einer Methodenimplementierung stimmen nicht überein

Wenn ich den MethodOverride auskommentiere...

//buider.DefineMethodeOverride(method,getMethod

...und den Methodennamen Impliziet anstatt Explizit festlege erhalte ich folgende Fehlermeldung: > Fehlermeldung:

Die Methode "get_TestProperty() im Typ "XYZ" der Assembly "XYZ" hat keine Implementierung

Jedoch wenn ich die Property im Interface in ein Eindimensionales Array um deklariere, funktioniert alles einwandfrei.

Kann mir da jemand helfen?

03.03.2014 - 17:29 Uhr

Hallo,

da ich mir nicht vorstellen konnte das ich der erste bin mit diesem Problem habe ich heute nochmal kurz in www gestöbert (hingegen herbivore ratschläge).

Scheinbar habe ich heute bessere Suchbegriffe gefunden 😃
Dabei bin ich auf folgendes gestoßen:

Converting Visual Studio 2003 WinForms to Visual Studio 2005/2008 partial classes

Ich habe das Macro noch meinen wünschen angepasst, aber damit kann ich ganz gut arbeiten.

28.02.2014 - 16:05 Uhr

Hallo,

ich habe mit etwas Fleißarbeit und "SharpDevelop 4.3" große Mengen alten VB.net Code in C# Konvertiert und unser Projekt weiter Aufgeräumt.

Jedoch bei einigen Controls und Forms wurde der Designer Relevante Code nicht wie üblich in einer Code-Behind Datei (also ControlName.Designer.cs) ausgelagert. Stattdessen ist der Designer Code direkt in der ControlName.cs Datei enthalten.

Frage: Kennt jemand eine tool welches die Code Dateien Parsed und die Code teile welche in der #region " Windows Form Designer generated code " liegen, automatisch in eine ControName.designer.cs Datei Auslagert und die *.csproject Datei anpasst?

Ich weiß durchaus wie man es per hand macht. Ich könnt natürlich auch einen Parser selber schreiben. Jedoch würde ich wenn möglich etwas Vorhandenes nutzten 😃

Gruß
nok

29.10.2013 - 22:43 Uhr

Hallo,

mir persönlich gefällt Youtrack von Jetbrains ganz gut: http://www.jetbrains.com/youtrack/

Hier kannst du dir das System anschauen: http://youtrack.jetbrains.com/

Was die Dokumentenverwaltung betrifft, kann ich keinen tipp geben, da wir durch unsere IT Sharepoint als Vorgabe haben und ich damit nicht 100% zufrieden bin.

Jedoch wie bereits erwähnt: Ticket Systeme gibt es genügend:
Comparison of issue-tracking systems

Wichtig ist es das dass Werkzeug auch von den Mitarbeitern genutzt \ gelebt wird.

In der letzten dotnetpro habe ich einen Artikel http://www.dotnetpro.de/articles/onlinearticle4674.aspx
gelesen, in dem die Vor- und Nachteile von Altbekannten Tools wie Pinnwand mit Karteikarten gegenüber Digitalen tools erörtert werden (wenn auch aus meiner Sicht der Artikel zu Voreingenommen ist)

Gruß
Nok

11.05.2013 - 09:53 Uhr

Hallo herbivore,

nicht gerade die Antwort die ich hören wollte 😃
dann muss ich mir etwas anders überlegen.

Danke

11.05.2013 - 03:40 Uhr

Hallo,

zur Laufzeit erzeuge ich mittels AppDomain.DefineDynamicAssembly eine neue Assembly. Darin wird zur Laufzeit neue Klassen erzeugt, welche bestimmte Interfaces Implementieren.

Das erzeugen einer Instanz von einer dieser Klassen funktioniert auch ohne Probleme.
Jedoch wenn ich eine Instanz von einer dieser Dynamisch erzeugten Klassen mittels einer Remoting Schnittstelle an einen Client übergeben möchte erhalte ich während des Serialisieren eine Exception > Fehlermeldung:

Unable to find Assembly: DynamicCreatedAssembly

Die Dynamische Assembly wird in dem Lokalen Server Prozess erzeugt.

 AppDomain appDomain = Thread.GetDomain();
var assemblyName = new AssemblyName();
assemblyName.Name = "DynamicCreatedAssembly";
AssemblyBuilder assemblyBuilder = appDomain.DefineDynamicAssembly(
assemblyName, AssemblyBuilderAccess.RunAndSave);

Mittels einem Proxy ruft der Client das Object vom Server ab.
Ich schätze nun das der Client Process (AppDomain) keinen Zugriff auf die "DynamicCreatedAssembly" hat?

Kann mir diesbezüglich jemand helfen? Oder geht das so gar nicht wie ich das vorhabe?

ach: die Dynamisch erstellten Klassen sind als Serializable markiert.

02.04.2013 - 12:51 Uhr

Hallo,

es lag an dem Formattern die in der exe.config Eingestellt hatte!
Problem war das ich keinen ClientSinkProvider angegeben habe zumindest nicht richtig. Da dieser ja für das Deserialisieren verwendet wird.

die ServerApp.exe.config habe ich nun wie folgt Eingestellt:


<channel ref="tcp" port="50220" useIpAddress="false">
	<serverProviders>
	  <formatter ref="binary" typeFilterLevel="Full" />
	</serverProviders>
	<clientProviders>
	  <formatter ref="binary" />
	</clientProviders>
</channel>
<channel ref="http" port="50221" useIpAddress="false">
	<serverProviders>
	  <formatter ref="soap" typeFilterLevel="Full" />
	</serverProviders>
	<clientProviders>
	  <formatter ref="soap" />
	</clientProviders>
</channel>

auf der Client seite mach ich dies mittels code:


            switch (channelType)
            {
                case ChannelType.Tcp:
                    
                    ConnectionInfo.Channel = "tcp";
                    props["name"] = TcpChannelName;
                    var binaryProvider = new BinaryServerFormatterSinkProvider();
                    binaryProvider.TypeFilterLevel = TypeFilterLevel.Full;
                    var tcpChannel = new TcpChannel(props, null, binaryProvider);
                    ChannelServices.RegisterChannel(tcpChannel, false);
                    break;

                case ChannelType.Http:

                    ConnectionInfo.Channel = "http";
                    props["name"] = HttpChannelName;
                    var httpProvider = new SoapServerFormatterSinkProvider();
                    httpProvider.TypeFilterLevel = TypeFilterLevel.Full;
                    var httpChannel = new HttpChannel(props, null, httpProvider);
                    ChannelServices.RegisterChannel(httpChannel, false);
                    break;
            }

man könnte aber auch das ganze in der Client.exe.config wie folgt machen:



<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel ref="tcp" port="0">
          <serverProviders>
            <formatter ref="binary" typeFilterLevel="Full"/>
          </serverProviders>
        </channel>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

wie kann ich eigentlich diesen thread als gelöst markieren?

01.04.2013 - 15:44 Uhr

Hallo,

ich habe eine Remoting Verbindung zu einem Windows Service ermöglicht.
Diesbezüglich habe ich auf Server sowie Client seite einen eigene Klasse geschrieben welche das Interface "ISponsor" Implementieren.

Sofern die Leasetime abgelaufen ist wird jedoch "ISponsor.Renew" nur auf der Server seite aufgerufen. Auf der Client seite passiert leider nichts?

Hier mal der Code für das Registrieren des Sponsors auf der Client seite, wobei ich anmerken muss das dass Registrieren fehlerfrei ohne Serurity Exception durchläuft:


        /// <summary>
        /// Generate new factory
        /// </summary>
        IRemoteFactory NewFactory
        {
            [SecurityPermission(SecurityAction.LinkDemand, Unrestricted = true)]
            get
            {
                m_remoteFactory = CreateRemoteFactory();
                return m_remoteFactory;
            }
        }

        /// <summary>
        /// Reuse existing factory if one exists or create a new one
        /// </summary>
        IRemoteFactory CurrentFactory
        {
            [SecurityPermission(SecurityAction.LinkDemand, Unrestricted = true)]
            get { return m_remoteFactory ?? NewFactory; }
        }

        /// <summary>
        /// Generate new proxy
        /// </summary>
        IApi NewProxy
        {
            [SecurityPermission(SecurityAction.LinkDemand, Unrestricted = true)]
            get
            {
                m_apiProvider = CreateApiServer();
                return m_apiProvider;
            }
        }

        /// <summary>
        /// Reuse existing proxy if one exists or create a new one
        /// </summary>
        IApi CurrentProxy
        {
            [SecurityPermission(SecurityAction.LinkDemand, Unrestricted = true)]
            get { return m_apiProvider ?? NewProxy; }
        }   
        IRemoteFactory CreateRemoteFactory()
        {
            //Erzeugt ein Factory Object auf dem Remote Server
            object remoteFactory = Activator.GetObject(typeof(IRemoteFactory), Connection.Url);
            return (IRemoteFactory) remoteFactory;
        }


        IApi CreateApiServer()
        {
            //Mit hilfe des Factory objects wird das eigentlich Server Object erstellt
            IApi apiServer;
            try
            {
                apiServer = CurrentFactory.CreateApiServer();
            }
            catch (Exception ex)
            {
                CheckException("factory", ex);
                apiServer = NewFactory.CreateApiServer();
            }

            //Registriere den client sponsor für das Remote Object...
            var mbr = apiServer as MarshalByRefObject;
            if (mbr != null)
            {
                try
                {
                    m_sponsor = new ClientExpirySponsor(this);
                    m_lease = (ILease)RemotingServices.GetLifetimeService(mbr);
                    //m_lease = mbr.GetLifetimeService() as ILease;
                    m_lease.Register(m_sponsor);
                }
                catch (Exception ex)
                {

                    throw new ConnectionException(Connection, "Could not Register client sponsor on server", ex);
                }
            }

            apiServer.SetClientId(ClientIdHelper.ClientId);
            return apiServer;
        }

und hier ist meine ClientExpirySponsor Klasse:

    public class ClientExpirySponsor : MarshalByRefObject, ISponsor
    {
        readonly IExpire m_leasedObject;

        public ClientExpirySponsor(IExpire leasedObject)
        {
            m_leasedObject = leasedObject;
        }

        public TimeSpan Renewal(ILease lease)
        {
           //hier komme ich nie an!?
            m_leasedObject.Expiring();
            return TimeSpan.Zero;
        }
    }

Kann mir diesbezüglich jemand helfen, benötigt ihr noch die app.exe.config ?

Danke und Gruß
Nokinger

11.03.2013 - 11:22 Uhr

Hi,

ich danke euch mal. Letztendlich ist es ja logisch, bloss war mir nicht bewusst das man T[] von T so unterscheiden kann -> irgendwie blöd von mir 😃

Also ich bin davon ausgegangen er kann das nicht unterscheiden...

int[] val = new int[] {1,2,3,4};
foo.Make(val);
foo.Make<int[]>(val);

class Foo
{
    public T[] Make<T>(T[] val)
    {
         return val;
    }

    public T Make<T>(T val)
    {
         return val;
    }
}
08.03.2013 - 20:53 Uhr

Hey Tomy Danke das ist es was ich wollte,

blöderweise bin ich vorhin schon auf "MakeGenericType" gestoßen aber hab das nicht richtig verstanden und auch nicht richtig wahrgenommen...

ich habe mal auf http://rextester.com/runcode ein schnellen test gemacht:


//Title of this code
//Rextester.Program.Main is the entry point for your code. Don't change it.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.ComponentModel;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var foo = new Foo();
            foo.Make(new int[]{1,3,5,7,9});
        }
    }
    
    public class Foo
    {
     
        public void Make<T>(T val)
        {
           Type type = typeof(T);
           if (type.IsArray)
           {
               Type elementType = type.GetElementType();
               Type bindingListType = typeof(BindingList<>);
               Type bindingListOfElementType = bindingListType.MakeGenericType(elementType);
               object bindingList = Activator.CreateInstance(bindingListOfElementType,new object[]{val});
               foreach(var item in (IEnumerable)bindingList)
               {
                   Console.WriteLine(item);
               }
           }
        }
    }
}
08.03.2013 - 17:17 Uhr

Hallo,

ich gehe davon aus das einige sagen werden: "geht nicht warum fragst du überhaupt". Insgeheim habe ich aber trotzdem die kleine Hoffnung das es da ein magic trick gibt 😃

Na gut:
ich habe eine Methode welche einen Generischen Typ erwartet!
Zum Beispiel

void Foo<T>();

Innerhalb dieser Methode möchte ich sofern T vom type T[] (also ein Array) ist, eine BindingList<> erzeugen. Wobei der Generische typ von der bindinglist, der ElementType von T sein soll.

Beispiel: wenn T = int[] => dann möchte ich eine BindingList<int> erzeugen.
Theoretisch könnte ich eine eigene Creator Methode oder Klasse bauen, dass möchte ich aber vermeiden...

Gibt es diesbezüglich eine Möglichkeit?

Nok

12.11.2012 - 10:22 Uhr

Hallo,

Sollte der Releasestand (z.B. für Bugfixes) doch noch geändert werden müssen, kann man immer noch ein Branch erstellen

@herbivore: mit tagen meinst du "Label" setzten? Dann müsste ich das für jedes Einzelne Common-Projekt machen. Das nachträgliche Zusammenbauen wird auch wieder nicht einfacher. Wenn neue Systeme wie der TFS manche Sachen etwas Verkomplizieren, dann stoße ich da leider oftmals auf Wände bei manchen Kollegen auch wenn der Mehraufwand uns einen erheblichen Organisatorischen Vorteilbringt. Von daher habe ich mich endschieden das Ganze mit Workspace Mapping umzusetzen. Wobei das Mapping mittels Power Shell innerhalb des Teams Vereinheitlicht wird.

Aber danke für eurer Unterstützung.

Gruß
Nok

07.11.2012 - 12:42 Uhr

Hallo herbivore,

vielen danke für deine Antwort. Nun was ich will und welche möglichkeiten ich habe sind mir noch nicht so ganz klar, von daher bin ich für alles offen 😃

Nun um mein Problem zu Verdeutlichen (wobei thema ist mi sicherheit nicht nur bei mir der fall):

Ich habe z.b 2 Solutions: "A" und "B"
Welche unter root liegen. Ausserdem habe ich ein "Common" Projekt das auch unter root liegt.
Beide Solutions Referenzieren das Projekt "Common".
Die Ordner Struktur sieht wie folgt aus:

$\Root
|
 - A
   - Project-A1
   - Project-A2
|
 - B
   - Project-B1
|
 - Common
   - Project-C1

Nun möchte ich die Solution "A" Branchen da ein Release ansteht. Also erstelle ich ein Branch von Ordner "A". Nun ist aber mein Problem das in diesem Branch nur "Project-A1" und "Project-A2" enthalten sind. Der Verweis auf das "Project-C1" ist aber immer noch auf den aktuellen Stand also den Haupstrang gesetzt. Somit gelangen in das Release änderungen aus dem Common Projekte die eigentlich erst im nächsten Release enthalten sein sollen. Und ich habe keine Eindeutigkeit für das Release (für das spätere Nachvollziehen von Bugs für dieses Release).

hier wird dieses Thema Besprochen: Abhängige Komponenten mit TFS 2010 Version Control verwalten

Gruß
Nok

06.11.2012 - 18:39 Uhr

Hallo,

ich hab bereits einiges gelesen und wenn ich es so richtig Verstanden habe bleibt mir für mein Problem nichts anderes übrig wie nachfolgende Beschreibung, oder !?

Problem
Wir stellen gerade von uralt "SourceSafe 2005" auf "TFS 2012" um, und dabei möchte ich auch eine anständige Branching Struktur aufbauen. Nun habe ich jedoch doch das Problem das ich eine *.csproj Datei, also ein Projekt in mehreren Solutions Verwende. Von daher habe ich einen relativen Verweis auf dieses Projekte gesetzt. Nun möchte ich die Solution "a" Branchen. In diesem Branche sind aber nur die Projekte enthalten welche direkt unter dem Ordner liegen. Die Projekte welche relative Referenziert wurden sind dagegen nicht im Branche enthalten. Da dieses Projekt in einem Übergeordneten Ordner liegt.

Lösung: laut ALM Guide
Ich muss einen Branche von dem zu Scharenden Projekt erstellen und diesen in den Sourcen Ordner ablegen in dem die Solution liegt die das Projekt Referenziert. Sofern ich eine Änderung in dem Shared Projekt durchführe muss ich diese mit einem Merge an die Referenzierenden Branches übertragen.

Das macht mich etwas stutzig, das ist doch n-fache an Datenhaltung und der Merge wird leicht vergessen, oder über sehe ich da etwas?

In dem angefügten Bild ist wird Dargestellt was ich meine. Entnommen aus dem TFSGuide von http://tfsguide.codeplex.com/

Mich stört am meisten das jemand den Merge Vergessen kann. Oder Verstehe ich da etwas falsch?

Gruß
Nok

19.08.2012 - 11:28 Uhr

Hi Lodi,

Es passiert nichts weil du es so Programmiert hast 😃

also Prinzipiell -> Application Arguments

Über die suche in Google hätte man jedoch durchaus fündig werden können ...

Gruß
Nok

03.08.2012 - 08:54 Uhr

Hallo Lehnerson,

also wie Abt bereits sagte:

und direkt der Hinweis, dass Windows kein Echtzeit-Betriebssystem ist Demnach kannst du nicht davon ausgehen das dein Task welcher in der Windows Welt läuft Vorhersehbar aufgerufen wird.

Aber du sagtest doch das du auf Beckhoff \ TwinCat aufsetzt oder Beckhoff CX ?
Also hast du ja eine Echtzeit welt.

Um das ganze abzukürzen: Aufgrund dessen das du in der Windows-Welt keine Echtzeit besitzt jedoch in der TwinCat-Welt (Soft-SPS), würde ich dir Empfehlen ein Buffer anzuwenden. Zum Beispiel könntest du in der SPS die Werte der letzten 30 Sekunden Puffern und dann in einem UDP oder TCP Packet an die Windows-Anwendung Versenden.

Gruß
Nok

11.07.2012 - 13:53 Uhr

Hallo,

ich habe einen Windows Service welcher als Server für eine .net Remoting Verbindung agiert.
Die Remoting Konfiguraton sieht wie folgt aus:

<system.runtime.remoting>
    <application>
      <lifetime leaseManagerPollTime="1s"/>
      <service>
        <wellknown mode="Singleton" type=Rda.RemoteFactoryImpl,RdaRemoteServer" objectUri="RdaServer"/>
      </service>
      <channels>
        <channel ref="tcp" port="50042" useIpAddress="true"/>
        <channel ref="http" port="50043" useIpAddress="true"/>
        <channel ref="ipc" portName="RdaServerPort"/>
      </channels>
    </application>
  </system.runtime.remoting>

Eine Client Anwendung baut die Verbindung bei Programmstart zu dem Servive mittels .Net remoting auf:


m_url = "tcp://" + 192.168.1.2 +":50042/RdaServer";
IRemoteFactory remoteFactory = (IRemoteFactory) Activator.GetObject(typeof (IRemoteFactory), m_url);

Nun das gnze habe ich etwas abgewandelt gepostet. Also keine fixe IP Addresse in dem String usw.
wie dem auch sei, mein Problem bzw. meine frage ist:

Manchmal muss ich die remoting Konfiguration des Server ändern damit der Client eine Verbindung zum Service aufbauen kann. In diesem fall muss ich "UseIPAddress" auf "false" setzten. Bisher habe ich das nur machen müssen wenn der Service auf einem anderen Rechner läuft wie der Client und wir dann über das Kunden Netzwerk die Verbindung aufbauen müssen. Bzw. manchmal funktioniert es mit "true" und manchaml mit "false".

Heute habe ich den Fall gehabt das ich "UseIpAddress" auf "false" hab setzten müssen wobei beide Anwendungen auf dem selben rechner liefen:

m_url = "tcp://" + localhost +":50042/RdaServer";

Seltsamer weiße geht das ganze aber auch mit "UseIPAddress" = "true" auf diesem Rechner, in diesem Fall muss ich allerdings nach dem erstmaligen Starten des Service (Rechner neustart) den Service manuell noachmal Neustarten, damit der Client eine Verbindung aufbauen kann. Mit UseIpAdress = "false" geht es auch ohne erneuten Neustart des Service.

Kann mir das jemand erklären oder ein gutes Nachschlagwerk (in Papierform oder Elektronisch) Anbieten ?

Danke und Gruß

30.05.2012 - 18:55 Uhr

Hallo

besser ist es die Equals Methode zu Überschreiben: Guideline for Implementing Equals...

Gruß
Martin

12.05.2012 - 00:11 Uhr

Hallo,

nun ja es gibt ein Schlagwort hierfür und das nennt sich COM Interopability oder auch COM Interop.
Einführung: Introductions

Hier habe ich sogar eine Projekt vorlage für deine .net solution: Template
Das kannte ich zwar noch, wusste aber den link nicht mehr. Hat mich ein bisschen suchzeit gekostet 😃

noch ein übersichtsbild: http://p.mql5.com/data/2/249/CCWInteraction4.png

womöglich hilfreich sind noch folgende links:

Mixing .NET and native code

UND

How to call C++ code from Managed, and vice versa (Interop)

Villeicht helfen dir ja die Links.

Gruß
nok

09.05.2012 - 23:34 Uhr

hi,

ich habe zwar dein video mir nicht angeshen, womögloch ein fehler 😃
Aber wenn ich da Darstellungsprobleme über RDP lese, dann fällt mir dieses Thema ein: Display quality of GDI+ applications via Remote Desktop

Villeicht geht es in diese richtung.

Gruß
Nok

30.04.2012 - 21:04 Uhr

schau dir mal string.Format an.
In deinem Fall reicht ein einfacher cast auf ein int

string.Format("{0}",(int)zahl);

Eine suche hier im Forum oder das Verwenden einer Suchmaschine hätte dir allerdings sicherlich schneller einer Antwort geliefert.

Gruß
Nok

25.01.2012 - 16:10 Uhr

Hi,

gut dann mach ich es erstmal so ....

das der "code" nicht geht will ich gar nicht abstreiten (hab ihn einfach während ich den Thread geschrieben habe aus der hand schweifen lassen).

Und das mit dem Where ist eindeutig falsch 😃

25.01.2012 - 14:07 Uhr

Hi herbivore ,

Richtig: das will ich haben. Ein Object von "System" hat eine Liste von möglichen IDs und ein Object von "NativeObject" hat eine Id das dann allen System Objekten zugeordnet werden soll welches im entsprechenden Id Range liegt.

Ich weiß, hab das ganze relative komplex beschrieben. Was ist nun mein Problem: Prinzipiell gibt es da keins. Allerdings habe ich bedenken bezüglich meiner Laufzeit.
Von daher dachte ich, es gibt irgendwie eine Art HashMuster oder ein guten Algorithmus der das ganze besser umsetzt. Und womöglich kennt ihr da etwas !?

Ich kann das ganze sequenziell umzusetzten und mit hilfe von Linq relative "schön" \ "einfach" im Code umsetzten, aber es wäre nicht unbedingt das Performanteste verfahren.

Gruß
Nokinger

24.01.2012 - 10:23 Uhr

Hi,

bezüglich dem Betreff ist mir nichts besseres Eingefallen.

Ich wollte mal nachfragen wie ich folgendes Problem elegant lösen könnte.

Gegeben ist:

class System
{

   public List<NativeObject> NativeInfos;
   public List<IdRange> Ids;
   public System(string idFilter)
   {
        Ids = ParseIdFilter(idFilter);
    }

    List<IdRange> ParseIdFilter(string filter)
    {
          //Der string kann wie folgt aussehen: "1;200;500-600;250;10-20"
          //Prinzipiell wie im Drucken Formula von Word bei dem man bestimmen kann
          //welche seite gedruckt werden soll.

          //do the parse
          //split or regex what ever, parse the string...
     }
}

class IdRange
{
   public int Min;
   public Max;
}

Nun habe ich ein Object das ich von einer Nativen Anwendung erhalte.
Dazu packe ich die Informationen der Native Anwendung in ein Managed Object:

class NativeObject
{
    public int Key;
    public NativeObject(int key)
    {
        Key = key;
     }
}

nun habe ich folgendes:

void Main(object args[])
{
   List<System> Systems = new List<System>{
                                new System("501;100-200"),
                                new NativeObject(10)};

   //wird normal anders erstellt...
   List<NativeObject> NativeItems = new List<NativeObject> { 
                                new NativeObject(150),
                                new NativeObject(501),
                                new NativeObject(10)};



    // jetzt suche ich etwas wie ich die Native Objecte in die entsprechenden
    // System Objecte Packe.
    // Also zum beispiel: 
    foreach (var native in NativeItems)
    {
            System  sysObj = Systems.Select.Where(sys => sys.Ids.Contains(native.Key));
             if (sysObj != null)
             {
                   sysObj.NativeInfos.Add(native);
             }
     }
}

Der Code ist nur ein schema und wurde mal salop hier erstellt:
Mir ist durchaus bewusst wie ich jetzt weiter machen müsste oder es richtig machen müsste das dass ganze zum einen übersetztbar ist und im weiterem es auch funtkioniert. Bloss suche ich eine Elegantere \Schnellere Lösung kennt ihr da einen Algorithmus?

Ich hoffe wie immer ihr könnt nachvollziehen was ich möchte.

Danke mal für die mühe.

Gruß
Nokinger

21.10.2011 - 09:27 Uhr

hi,

es scheint so das es am ActiveX Control liegt. Sofern ich mein CustomControl in ein seperates form lege und die Opacity property des seperaten form setze, scheint es zu funktionieren.

Kann mir jemand einen erklärung dafür geben !?
Oder muss ich es als gott gegeben hin nehmen?

Gruß
Nok

20.10.2011 - 20:35 Uhr

Hallo,

nerviges thema und es gibt auch schon ganz viele Einträge hier. Bei google wird auch fündig. Trotzdem wage ich es einen Thread zu öffnen ...

Ich habe ein CustomControl erzeugt: das aus einer Elipse und 4 DrawString objecten besteht (wobei die 4 string Objects jeweils Pfeils links, Rechts, Oben und Unten sind). Damit das Control Transparent ist habe ich CreateParams überschrieben:


protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020;//WS_EX_TRANSPARENT
                return cp;
            }
        }

Ausserdem habe ich im Ctor dieses CustomControl folgende Zeilen Hinzugefügt:

        
SetStyle(ControlStyles.SupportsTransparentBackColor, True);
UpdateStyles();
BackColor = Color.Transparent;

Das CustomControl wurde im Form über ein ChartControl (ActiveX) gelegt. Im Ctor des Forms habe ich folgende Zeile Hinzugefügt:


CustomControl1.Parent = ChartControl1;

Das Control sieht nun so aus wie im angefügten ZIP "normal.png"
Wenn ich nun einen RemoteDesktop öffne sieht das Control aus wie im angefügten ZIP "viaRemote.png". Das ganze hat was mit diesen thema zu tun -> MSDN Suport

Also dachte ich: setzte das Control auf doublebuffered = true
Dann sieht das Control aus wie im angefügten ZIP "doublebufferd.PNG".
Selbigen effekt habe ich wenn ich anstatt doublebuffered = true folgende zeile code im ctor des custom control aufrufe, unabhängig vom RDP Oder Lokal.

SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer, True)

Beim DoubleBuffered Modus drawed er in den buffer noch igrendwelche andere controls aus meiner form hinzu ... wie kann ich das unterbinden !?

Schon mal danke für's lesen

Gruß
Nok

14.08.2011 - 11:48 Uhr

nun ja wie gfoidl bereits sagte immer wieder die Augen aufmachen und bereit sein täglich von anderen zu lernen. In dem du dir auch einfach mal die Probleme und vor allem die Antworten auf diese Problem von anderen Leuten durchliest, oder eine Zeitschrift in dem wissen explizit für dich Kanalisiert wird z.B. die dotnetpro finde ich sehr gut gemacht -> Darf ich hier Werbung machen!? 😃

Oder immer wieder mal ein gutes Buch zur hand nehmen und das entspannt daheim ohne den stress den man am PC hat durchliest. Begriffe aus dem Buch oder ähnliches welche man nicht kennt -> einfach über das netz dann weiterverfolgen...

Nun ja genial ist es auch immer wenn du quasi einen Mentor hast. Weiß nicht ob du das ganze als Hobby oder beruflich machst, aber ich hatte z.B. einen externen in der Firma in der ich Arbeite, von dem sein Code lerne ich heute noch
Es gibt in verschiedenen Städten auch so genannte .Net Usergruppen Treffs, vielleicht ist das was für dich!?

ich weiß das ist jetzt kein thread in dem das Thema design pattern ansich behandelt werden soll ... trotzdem möchte ich noch die folgende seite posten: GoF

zum Schluss möchte ich noch auf diesen beitrag von gfoidl in Design Pattern: Welche benutzt Ihr? verweisen in dem er bezüglich patterns das essentielle auf den punkt bringt.

Wobei der Satz immer sehr leicht gesagt ist: => "wichtig ist es zu wissen das es möglich ist und wo man es nach lesen kann wie es geht".

gruß
nok

02.08.2011 - 08:34 Uhr

subscribe das MouseUp Event des DGV, damit kannst du dann die Row oder column herrausfinden:


private void dgv_MouseUp(object sender, MouseEventArgs e)
{
  DataGridView.HitTestInfo hitTest = ((DataGridView)sender).HitTest(e.X, e.Y);
                                    
  if (hitTest .Type == DataGridViewHitTestType.Cell)
  {
     dgv.CurrentCell = dgv.Rows[hTest.RowIndex].Cells[hTest.ColumnIndex];
  }
}

Du Kannst dann auch die Zeile Makieren und in den propertys des DGV die SelectionMode auf FullRowSelect einstellen.

Gruß
Nok

24.03.2011 - 13:13 Uhr

Also hab eine lösung gefunden!

falls es jemand brauchen sollte:
ich habe das ganze einfach mal in einem vb .net projekt ausprobiert. Da VB.Net kein out paramter kennt sondern nur ByRef. Da hat das ganze auch ohne weiteres geklappt.
Allerdings möcht ich jetzt nicht das ganze in VB.Net Umsetzten, also hab ich weiter gesucht.
Wie folgt kann ich nun das ganze auch in einem C# Projekt einbinden:

1: Ich habe in einem C# Projekt über Add Referenz die OCX Komponente eingebunden.
1.1 dabei erzeugt .net automatisch die wrapped dll interop.ocxname.dll
2. mit hilfe von ildasm.exe habe ich aus der wrapped dll den il code erstellen lassen
3. in der .il datei habe ich nach den [out] paramtern bei den entsprechenden event methoden gesucht -> geöffnet mit notepad
4: dabei war die deklaration ([out] int32&,[out] int32&)
5: dies habe ich geändert in (int32&,int32&)
6: den il code gespeichert.
7: im meinem c# projekt die referenz zu dem ocx gelöscht
8: mit hilfe von ilasm.exe aus der il datei eine .dll erzeugt
9: eine referenz zu de projekt hinzugefügt (neue dll)

und schwubs konnte ich mit hilfe von (ref int,ref int) mein Projekt kompilieren.

22.03.2011 - 19:21 Uhr

Hallo,

ich habe eine OCX Komponente in mein C# Projekt eingebunden.
Über Add Reference\COM

Soweit funktioniert auch alles, allerdings hat der OCX Wrapper einen Delegate aus der OCX Komponente falsch umgesetzt.

Sprich er erwartet einen delegate mit folgenden parametern => (out int x, out int y)
Da das ganze ein Event aus der OCX Komponente ist kann der Compiler nicht nachvollziehen zu welchem zeitpunkt die beiden out paramter initialsisiert wurden und gibt deshalb einen compiler fehler aus: CS0269 Use of unassigned out parameter 'parameter'

Laut der Doku von der ocx dürfte an dieser stelle für den EventHandler gar kein out paramter erwartet werden!

Wie kann ich das lösen? Bzw. Woran liegt das ?
Kann man die Interop*. datein irgendwie manipulieren ? 😃

11.03.2011 - 08:51 Uhr

Hi,

und danke für die Rückmeldungen!

@winSharp93:
Obfuscation kenn ich, wir setzten auch momentan einen ein. Wobei Obfuscation nicht wirklich den IL Code Schützt. Außerdem ist es immer stressig mit Reflections usw.

**@Lars Schmitt: **
Wibu scheint mir eine sehr gute Lösung zu sein, allerdings so wie ich gelesen habe (auf den ersten blick), verwenden die einen Lizenz Dongle. Das kommt bei uns nicht in frage. => Wobei ich mir das nachher noch mal genau durchlesen werden! Danke für die Alternative!!!

**@m.knigge: **
Ja der Preis ist super. Sofern es wirklich das hält was es verspricht, ist das eine "Lutscher" Investition => Für wenig Geld bekommt man einen großen Genuss 😁
Bezüglich Plattformabhängigkeit und Mono sehe ich auch so. Allerdings wäre dies für unser Projekt in diesem fall nicht schlimm!

Letztendlich werd ich unser Projekt mal Encrypten und einen Dauertest laufen lassen. Zumindest müsst ich das mal veranlassen 🙂

Danke mal an alle!

Gruß
Nokinger

10.03.2011 - 17:30 Uhr

Die haben sicher einen FAQ bzw. Support oder auch eine Demo Version...

Ja schon allerdings ist dieser FAQ nicht gerade mit einer großen anzahl an beiträge gefüllt. Meine frage geht eigentlich eher dahin ob jemand dieses Encrypter bei größerenn Projekten eingesetzt hat und auf Probleme gestoßen ist oder ähnliches.

10.03.2011 - 16:37 Uhr

Hallo,

kennt jemand den NetEncryptor von Infralution ?

hab im Forum bereits gesucht bin aber nicht fündig geworden!

Kurze Erklärung was das Programm macht:
Das Programm encryptet den .Net code so dass nicht jeder den Code mit Hilfe eines .Net Decompiler lesen kann. Die encrypteten assemblies werden dann in einer resource Datei gepackt. Diese wiederum wird mit Hilfe eines Bootstrapper geladen und Decryptet.

Ich mein, mit dem Globalizer und dem Lizenzierung tool hat Infralution bereits gute Komponenten herausgebracht...

Trotzdem:

  1. Hat jemand bereits negative Erfahrungen mit dem Encryptor gemacht?
  2. Funktioniert das Automatisieren Komplikationsfrei ? => gut das teste ich selber 😉
  3. Kann der Code weiterhin mit einem CLR Profiler dekompiliert werden (sprich zur Laufzeit)?

Ich hoffe das Thema wurde nicht bereits in einem anderen Thread behandelt, den ich übersehen habe.

Gruß
Nokinger

05.11.2010 - 16:33 Uhr

args,

hat sich erledigt. In bestimmten fällen (je nach Bedienung des Programms) konnte es Vorkommen das ein Object welches innerhab dieser Methode verwendet wird leer war (null)

Durch ein try catch block bin ich drauf gekommen. Allerdings verstehe ich nicht warum die Anwendung ohne weiteres weiter lief.

Sorry für den thread eintrag 😃

Gruß
Nok

05.11.2010 - 15:38 Uhr

Hallo,

für das catchen der Standby phase verwende ich folgende code:


        #region - Power Modus Events -
        private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
        {
            if (e.Mode == PowerModes.Resume)
            {
                if ((byte)m_PowerState.ACLineStatus == (byte)ACLineStatus.Battery)
                {
                    //Computer Set in StandBy Mode by System - Battery
                    //Start last Activity
                    m_TrayIcons.LastStopClock.SetActive();
                }
                else
                {
                    //User Set computer in standby mode
                    //Start with Default
                    InitTrayIcons(true);
                }
            }
            else if (e.Mode == PowerModes.Suspend)
            {
                m_PowerState = MyPowerState.ReportPowerStatus();

                //STOP Active Clock
                m_TrayIcons.StopAllclocks();
            }
        }
        #endregion

Im Ctor Abonniere ich das PowerModeChange event, so brav wie ich bin!


            //Bind System Events
            SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

Das ganze funktioniert auch auf einem Notebook. Auf einem Desktop PC funktioniert das ganze nur einmal. Sprich nachdem ich den Rechner das erste mal in den Standby versetze und wieder Aufwecke klappt es. Sobald ich den PC das zweite mal in Standby versetze löst der PowerModeChange event nicht aus. Ich komme gar nicht erst in meine Delegate Funktion "SystemEvents_PowerModeChanged".
Dabei habe ich in meinem Programm keine einzige Zeile in der ich das Abonnierte event Kündige.

Hat dafür jemand eine Erklärung?
Danke

Gruß
Nok

15.09.2010 - 10:20 Uhr

Hallo,

ich benutze in meiner Anwendung für die erstellung von Log Dateien "log4net".
Dabei habe ich eine Konfigurationsdatei (XML) in der ich mehrer RollingFileAppender und UDPAppender für insgesamt 2 logger verwende.

In der xml Datei habe ich einen Standard Pfad z.B C:\Programme\MyApp\Logs
angegeben.

Während dem Programm Start lade ich die Konfiguration

log4net.Config.XmlConfigurator.Configure(); 

Problem dabei ist, das dass log4net direkt nach dem die Konfigurationsdatei geladen hat eine leere Log Datei erstellt. Wobei als Pfad erstmals der Standard pfad aus der XML Datei verwendet wird.

jetz kann es sein das ich daraufhin bevor ein Log Eintrag erzeugt wird den Standard Pfad auf einen Anderen Pfad umstelle möchte.
Dies mache ich mit:

log4net.Appender.RollingFileAppender.ActivateOptions();

Sobald nun der erste Log eintrag durch die Anwendung erzeugt wird, erstellt das das log4net auch die logdateien unter dem neuen pfad.

Problem ist nur das ich immer automatisch eine leere datei unter dem standard pfad habe. Nach dem das log4net die Konfigurationsdatei eingelesen hat.

die Konfigurationsdatei für log4net darf nicht Verändert werden. Da dies eine Standard Datei ist und bei Updates immer wieder überbügelt werden würde.
Aus diesem Grund speicher ich den anderen Pfad in einer "Kunden Datei".

Lösungen:
#Ich kann den alten Ordner löschen, sehr unschön.
#Ich kann die Konfiguration anstatt einer xml Datei auch direkt als einem Stream an das log4net übergeben => log4net.Config.XmlConfigurator.Configure(stream).

Die letzte lösung gefällt mir nicht da ich diesbezüglich einen eigenen Serializer der XML Datei erstellen müsste. Wobei das log4net das ja alles schon kann.

Gibt es keine elegante lösung?
Genial wäre es wenn das log4net erst eine Datei erstellen würde wenn ich auch wirklich einen Log Eintrag erzeuge.

Nok

07.09.2010 - 07:40 Uhr

Hallo Rainbird, danke für deine Antwort.
Wenn es nicht geht, dann geht es eben nicht!

Warum ist das in Deinem Fall so wichtig? Die Auswirkungen sind doch die Selben.

das stimmt schon, allerdings werde ich anderst reagieren wenn wir aus dem standby wieder herraus kommen "resumen".

Es geht darum ob es eine "Bewusste" oder "Unbewusste" Standby phase war.
Je nachdem Starte ich einen Default Prozess mit dem das Programm auch starten würde bei "Programm Start" bzw. Rechner Neustart = "Bewusste Phase".
Oder Ich fahre mit einem Prozess weiter der zuletzt vor der Standby Phase durchgeführt wurde = "Unbewusste Phase".

Letzendlich wollte ich damit erreichen das der Bediener möglichst wenig an das tool denken muss.

Nok

06.09.2010 - 13:47 Uhr

Hallo,
wenn es darum geht herrauszufinden ob der rechner in
standby versetzt wurde oder den wechsel in standby modus zu
verhindern, finde ich sehr viele ansätze im Netz.

Allerdings finde ich keine möglichkeit herrauszufinden ob der Rechner in den Standby modus durch den Benutzer oder durch das System (Energieoptionen etc.) eingeleitet wurde.

Mittels der GetSytemPowerStatus funktion:
kann ich abfragen ob der Rechner an der Batterie hängt oder nicht. Diese info reicht mir allerdings nicht aus.


        [DllImport("Kernel32.DLL", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal extern static bool GetSystemPowerStatus(SystemPowerStatus SystemPowerStatus);

Ist das Überhaupt möglich herrauszufinden durch wenn der Standby modus eingeleitet wurde ?

Gruß
Nok

31.08.2010 - 13:43 Uhr

ahhh,

da sag ich noch an der Farbteife kann es nicht liegen!

Die 3 "Farblosen" Images hatten eine Bittiefe von 64. Hab die Bilder nun als png32 Abgespeichert und schon glänzen die icons zur laufzeit in volle Farbenpracht 😁

aber danke für eure hilfe.

Gruß
Nok

31.08.2010 - 13:25 Uhr

Guten morgen,

Hast du schonmal volgendes versucht:

-Das Image während der laufzeit ändern bzw ein anderes laden (andere/gleiche farben)
-Das Image zur Laufzeit laden (anfangs hat der Button kein Image (am besten die OnShown-Methode nutzen))

Hi hab das ganze mal ausprobiert siehe Code.
Wenn ich das "std_Reload" image lade wird es farblich dargestellt. Das "std_undo" wird ohne Farben dargestellt.
Also muss es am Bild selber liegen (so wie Darth Maim bereits vermutet hat). Aber wie bzw. Was?
Ich mein im Designer kann ich es doch auch Farblich darstellen. Und an der Farbtiefe kann es heutzutage (32-Bit) auch nicht mehr liegen !?

Zur info die Images sind alle von einem Iconset: www.iconfinder.com

@JunkyXL -> da ich wie im code unten zu sehen ist das click event des buttons aboniert habe und er den code auch durchäuft kann ich dies leider ausschließen.

        private void btnUndo_Click(object sender, EventArgs e)
        {
            m_bTEST = !m_bTEST;
            if (m_bTEST)
            {
                btnUndo.Image = global::SCA.TimeRecorder.Controls.Properties.Resources.std_Reload;
            }
            else
            {
                btnUndo.Image = global::SCA.TimeRecorder.Controls.Properties.Resources.std_undo;
            }
        }
30.08.2010 - 17:47 Uhr

Hallo,

ich habe ein komisches Verhalten:

Ich habe ein Button welches ich mit einem Image laden möchte: hab dazu im Designer die Property "Image" belegt. Im Desginer sehe ich auch die Farben des Images. Allerdings zur Laufzeit wird das Image "Ausgegraut" dargstellt.

Die schaltfläche ist nicht disabled.
Verwende ich ein anderes Image funktioniert es. Sprich ich sehe auch zur laufzeit meine "Farben".

ich hab noch ein png angefügt:
punkt 1: button mit image im designer (erkennbar an den vergrößerungs rahmen)
punkt 2: button mit image zur laufzeit => kein grün !?

ich weiß auch gar nicht nach was ich da googlen soll, momentan. confused

bin für jeden tipp offen!

24.08.2010 - 16:31 Uhr

Hi herbivore,

ja ist richtig ich, ich benötige nur die x Koordinate.
Keine ahnung was ich gerade gedacht habe...

24.08.2010 - 16:05 Uhr

In dem Thread von progger: Gezeichnete Objekte mit der Maus verschieben

wird sehr gut beschrieben wie man erkennen ob ein gegebener punkt sich auf der linie, die ein graphic object umliegt befindet. Stichwort "IsOutlineVisible".

Ich benötigte allerdings die Info ob sich ein gegebener punkt auf der linken oder rechten "seitenwand" eines rectangles befindet.

wie kann ich das lösen?