Laden...
N
nekron
myCSharp.de - Member
7
Themen
14
Beiträge
Letzte Aktivität
vor einem Jahr
Dabei seit
06.06.2007
Erstellt vor einem Jahr

Hi ...

ich habe hier ein kleines Problem, wir haben in einer c# App eine externe DLL eingebunden, welche wir nun leider nachprogrammieren müssen - ich komme damit aber gar nit zurecht ...

Folgendes hab ich mal in C gebaut, aber mit dem comm_handle hab ich das erste PRoblem ...

Auch mit dem Callback (ich hab das mal abgewandelt auf nur ein int - da kommt absolut nicht das passende in der callback-routine an ...

Kann mir hier jemand als C-Loser unter die Arme greifen ? 😉 Wie deklariere ich das in C richtig ?

Gruss,

nekron

typedef struct Response
{
    LPSTR data;

    long ts;


} t_Response;


typedef int (* Callback)(t_ResponseInfo);

extern "C" __declspec(dllexport) int GetResponse( INT_PTR hndl, Callback cb)

{
    Response resp;

    cb(resp);
    return 1;
}
internal class Response
{

	[MarshalAs(UnmanagedType.LPStr)]
	public string data;

	[MarshalAs(UnmanagedType.U8)]
	public long ts;
}



[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate int PassResponseCallback(Response info);

[DllImport("DeviceTool", CallingConvention = CallingConvention.Cdecl)]
internal static extern int Getesponse(CommSafeHandle comm_handle, PassResponseCallback resp_cb);
Erstellt vor 2 Jahren

Hi ...

ich kann ja bekanntlich alle NIC's auslesen, ich möchte aber wissen, über welchen aktuell der Traffic ins Internet läuft. Mit nur einem aktiven Interface einfach, nur eines Up und Default Gateway gesetzt ...

Aber wenn ich nun ein aktives WLan habe und gleichzeitig mit einem Kabel irgendwo angeschlossen bin (und zum Beispiel auf diesem Interface auch ein GW eingetragen ist, warum auch immer), übers Kabel jedoch kein Internet vorhanden ist - wie kann ich das ganze herausfinden was wo ist ...)

Hintergrund - ich möchte dann eben das interface das nur Lokal ist entsprechend umkonfigurieren. Mach ich das aber beim falschen ist natürlich das Internet weg 🙂

Vielleicht hats ja jemand verstanden 🙂

Gruss
nekron

Erstellt vor 3 Jahren

Hi ...

wie kann ich einen Style für das Popup realisieren, welches zum Button selbst passt ? Für mich absolutes Neuland und absolut unverständlich 🙂 Bisher immer Winforms - nun versuche ich ein Projekt von WPF (nur Codebehind) zu modernisieren ..

Und wie komme ich zu einem Command ? Irgendwie funktioniert das bei mir nicht ... bekomme aber auch keinen XAML-Fehler ...


            <Button x:Name="Button_AddStorage" Style="{DynamicResource Button.Default}" Margin="27,10,473,10" Height="32" Width="Auto" ToolTip="{lex:Loc ResourceIdentifierKey=Tooltip_AddStorage}">
                <Path Fill="#FFFFFF" Data="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" />
                <Button.ContextMenu>
                    <ContextMenu x:Name="MainContextMenu" PlacementRectangle="{Binding RelativeSource={RelativeSource Self}}">
                        <MenuItem Header="CSV Datei" Command="{Binding AddCSVFileCommand}"/>
                            <MenuItem Header="Excel Datei" />
                            <MenuItem Header="Excel Formfiller" />
                            <MenuItem Header="Scriptreader" />
                    </ContextMenu>
                </Button.ContextMenu>

                <Button.Triggers>
                    <EventTrigger SourceName="Button_AddStorage" RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard>
                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainContextMenu" Storyboard.TargetProperty="(ContextMenu.IsOpen)">
                                    <DiscreteObjectKeyFrame KeyTime="0:0:0">
                                        <DiscreteObjectKeyFrame.Value>
                                            <sys:Boolean>True</sys:Boolean>
                                        </DiscreteObjectKeyFrame.Value>
                                    </DiscreteObjectKeyFrame>
                                </ObjectAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>

Aber vielleicht kann mich da jemand heranführen ? Oder habe ich eine andere Möglichkeit hier eine Art popup einzublenden und ganz normale buttons zu nutzen ?

Danke & Gruss,
nekron

Erstellt vor 3 Jahren

Danke dir - du hast mir sehr weitergeholfen und mich dem Weg ein ganzes Stück weiter gebracht ...

Vor allem bin ich auf den Multidatatrigger gestossen, mit welchem sich eine entsprechende Logik ohne probleme erstellen lies.

Viele Grüße,
michael

Erstellt vor 3 Jahren

Stimmt genau - ich komme rein aus der Richtung Winforms ... wobei ich hier schon versuche Logik und View zu trennen.

da im Usercontrol jedoch nur Werte für den Benutzer zur Eingabe aufbereitet werden - dachte ich wieso soll ich das nicht im Codebehind machen ? Funktioniert ja prinzipiell auch fast - aber auch nur fast.

Im Codebehind entscheide ich quasi -
wenn Tag.isABC -> txtBox1.Visibility = Hidden, textEdit1.Visibility ...
wenn Tag.isDEF -> txtBox1.Visibility = Visible

deswegen möchte ich möglichst mitgekommen wenn sich irgendein Property in _editTag ändert. Somit kann ich das dann für den Benutzer aufbereiten.

Erstellt vor 3 Jahren

Das Self habe ich nur zum probieren eingefügt, ob es eventuell so funktioniert 🙂 Dachte mit einfach ,wenn ich das NotifyPropertyChanged("Self") loslasse kommt das ChangeEvent im Usercontrol an. Hat leider nicht funktioniert.

Variablen sind natürlich _[...] als private deklariert, habe ich wohl beim raustippern vergessen...

Ich baue ein Usercontrol, welches Verschiedene Objekte aus dieser Klasse (_editTag ist ein gefülltes Objekt hiervon) bearbeiten bzw. zum Teil nur darstellen soll. Meine Idee war also ich bringe das nicht einzeln zum Usercontrol (also mehrer Bindings) sondern als Sammelobjekt.

Ich kann im Codebehind darauf auch zugreifen, dann passt das, aber ich bekomme keine Changenotifications.
Die ganze Tag Klasse ist eine etwas angestaubte Library, wurde wahrscheinlich historisch so programmiert. Aber werde das Stückchenweise umstellen, macht ja sinn.

Danke Dir, Sorry, C# ist nicht meine Muttersprache 🙂

Erstellt vor 3 Jahren

Mal stark abgekürzt zur Erläuterung...


    public class Tag : INotifyPropertyChanged
    {
        public Tag Self
        {
            get { return this; }
        }
        public Area DataSource
        {
            get
            {
                return this.DataSource;
            }
            set
            {
                this.DataSource = value;
                NotifyPropertyChanged("Self");  NotifyPropertyChanged("DataSource");
            }
        }
        public string ItemAsString
        {
            get
            {
                return this.ItemAsString;
            }
            set
            {
                this.ItemAsString = value;
                NotifyPropertyChanged("Self");  NotifyPropertyChanged("ItemAsString");
            }
        }
[...]
        #region PropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        protected void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
        #endregion

Im Usercontrol:


		public static readonly DependencyProperty AddressProperty = DependencyProperty.Register("Address", typeof(Tag), typeof(TagAdressBox), new FrameworkPropertyMetadata(null, OnAddressChanged)
		{
			BindsTwoWayByDefault = true
		});

		public Tag Address
		{
			get
			{
				return (Tag)GetValue(AddressProperty);
			}
			set
			{
				SetValue(AddressProperty, value);
			}
		}

		public static void OnAddressChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
		{
                [...]
                }


Im View:


                    <userctrl:TagAdressBox x:Name="Edit_Tag" Height="32" HorizontalAlignment="Left" Grid.Column="1" Grid.Row="3" Address="{Binding _editTag.Self, Mode=TwoWay}"/>

hab ich im XAML ein (Usercontrol entsprechen angepasst, das es einen String frisst) funktioniert das Notify


                    <userctrl:TagAdressBox x:Name="Edit_Tag" Height="32" HorizontalAlignment="Left" Grid.Column="1" Grid.Row="3" Address="{Binding _editTag.ItemAsString, Mode=TwoWay}"/>

zu deutsch will ich ein Change-Event haben wenn ItemAsString oder auch Datasource sich ändert.
Vielleicht reichts ja so schon ...

Erstellt vor 3 Jahren

Ich habe eine Klasse, diese implementiert INotifyPropertychanged, funktioniert auch prinzipiell (mit einzelnen Variablen).

Nun binde ich ein Objekt dieser Klasse an ein Usercontrol und möchte prinzipiell über alle geänderten Properties in der Klasse informiert werden, bekomme aber nur zur Erstellung ein Notify.

Erstellt vor 3 Jahren

Hi ...

kann mir mal einer helfen - ich komm hier nicht weiter ...

ich habe ein Usercontrol, an diesem hängt ein Objekt (einer Klasse) per Bindung - hier kommt ein ChangedEvent beim Erstellen - aber wie kann ich Änderungen der Klassenmember mitbekommen ?
Wenn ich an das Usercontrol ein Member der Klasse hänge dann klappt das, ich habe dann schon versucht ein self zu erstellen, und dann an mit NotifyPropertyChanged("self"); einen Changeevent auszulösen - klappt aber irgendwie auch nicht ...

Sorry - ich weiss nicht so ganz wie ichs umschreiben soll - bin zu doof dazu 🙂

Gruss,
nekron

Erstellt vor 16 Jahren

moin moin Namensvetter,

es dreht sich dabei um ein StatusDisplay für eine Produktionsanlage, die sehr viele Controls (Darstellung ähnlich einer MultiColor-Led) enthält um die Anlage zu Visualisieren. Klar, könnte ich die jetzt gruppieren (wobei ich denke so viel schneller wird das dann gar nicht gehen oder ? der redraw muss dann ja trotzdem durchgeführt werden).

Ausserdem verliere ich dann ja wieder flexibilitär, wenn jemand mal was an dem Projekt ändern will ...

Ich kann später hier mal ein Bild reinstellen, wie das ganze so ungefähr aussieht.

Bringt es was, alles per Bild zu zeichnen und nur Inhalte farblich zu füllen ?

danke
michael