Laden...

Forenbeiträge von nekron Ingesamt 14 Beiträge

16.07.2023 - 18:42 Uhr

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);
30.03.2022 - 05:41 Uhr

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

19.05.2021 - 18:06 Uhr

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

15.05.2021 - 05:42 Uhr

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

09.05.2021 - 14:45 Uhr

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.

09.05.2021 - 13:59 Uhr

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 🙂

09.05.2021 - 11:41 Uhr

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 ...

09.05.2021 - 11:27 Uhr

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.

09.05.2021 - 10:25 Uhr

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

14.09.2008 - 08:15 Uhr

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

12.09.2008 - 20:14 Uhr

Hi ...

gibt es eine möglichkeit, den Bildschirmaufbau bei Forms mit sehr vielen Controls zu beschleunigen ?

wenn da mal 500 controls auf der Form liegen und man die Form in den Hintergrund schickt und dann wieder nach vorne holt, kann man ja regelrecht zuschauen wie sich das so schön von rechts nach links aufbaut 🙂

was für Möglichkeiten gibt es da ? (SuspendLayout/ResumeLayout ist alles schon drin)

danke
michael

12.09.2008 - 20:10 Uhr

Hi All ...

nachdem ich meinem Problem schon ein wenig länger hinterherlaufe und einfach nichts finden kann frag ich mal hier nach 🙂

Ich habe ein Component, welches ein Dispose(..) enthält. Dieses Component liegt mit in einem MdiChild Container, welcher geschlossen wird. Die Controls in dem Container durchlaufen alle schön brav ihren Dispose, das Component jedoch nicht, das wird erst beim Beenden durchlaufen.

Kann ich dieses Verhalten ändern, da das Component dann einen ChangeHandler aufruft, der auf Daten des MdiChilds zugreifen will, welche dann ja nicht mehr da sind ...

oder hab ich da irgendwo einen Denkfehler ? selbst mit der Implementation von IDisposable hatte ich keinen Erfolg.

Oder ist dieses Verhalten bei Components normal ?

danke
miochael

31.07.2008 - 20:44 Uhr

Ich möchte euch allen Danken, das war genau der richtige Weg 🙂

Irgendwie ist man doch ab und zu zu blöd und sieht den Wald vor lauter Bäumen nicht oder ?

Schönen abend
michael

31.07.2008 - 19:25 Uhr

Hi ...

gibt es eine Möglichkeit, ein MDI-Child nicht per fMain = new frmMain(); zu erstellen sondern per fTemp = new xxType("frmMain"); ?

bzw. ist es generell Möglich alle verfügbaren (nicht angezeigten, das geht ja) Forms aufzulisten ?

Sorry - irgendwie doof geschrieben, aber finden tu ich auch nichts, wahrscheinlich such ich falsch - die Kommentare dann bitte sparen 🙂

danke michael