Springen naar inhoud


WPF

Raiseevent Vb.net Naar Csharp



  • Log in a.u.b. om te beantwoorden
Er zijn 2 reacties in dit onderwerp

#1 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 349 berichten
    Laatst bezocht 21 sep 2017 14:37

Geplaatst op 14 juni 2016 - 22:50

In Dll 1:

Visual Basic Code:
 Public Event CallWpf As CallWpfEventHandler
Public Delegate Sub CallWpfEventHandler(sstr As String)


Visual Basic Code:
RaiseEvent CallWpf(sWPFID)

In Dll2:
Visual Basic Code:
Private Sub CallWpf(sWPFid As String) Handles LayoutAnimals.CallWpf

Select Case sWPFid
Case "SYSTEM"

End Select

End Sub

Maar hoe doen we dit in Csharp.

#2 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 349 berichten
    Laatst bezocht 21 sep 2017 14:37

Geplaatst op 22 juni 2016 - 20:57

Ik heb het gevonden maar erg makkelijk is het niet:

C Code:
 xmlns="http://schemas.micro...l/presentation"
xmlns:x="http://schemas.micro...infx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openx...atibility/2006"
xmlns:local="clr-namespace:WpfRaiseEvent"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">


C Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfApplication1;

namespace WpfRaiseEvent
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void BtnWindow2_Click(object sender, RoutedEventArgs e)
{
TestWindow dll = new TestWindow();
dll.CallAlert += Dll_CallAlert;

TestWindow frm = new TestWindow();
frm.ShowDialog();

// dll.OnRinging();
}

private void Dll_CallAlert(object sender, DllEventArgs e)
{
label1.Content = e.Name;
}
}
}




C Code:
x:Class="WpfApplication1.TestWindow"
xmlns="http://schemas.micro...l/presentation"
xmlns:x="http://schemas.micro...infx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openx...atibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">


C Code:
using System;
using System.Diagnostics;
using System.Windows;

namespace WpfApplication1
{
public partial class TestWindow : Window
{
public delegate void AlertEventhandler(Object sender, DllEventArgs e);
public event AlertEventhandler CallAlert;

public void OnRinging()
{
DllEventArgs args = new DllEventArgs();
args.Name = "Event";
var handler = CallAlert;
if (handler != null)
handler(this, args);
}

public TestWindow()
{
InitializeComponent();
}

private void btnRaise_Click(object sender, RoutedEventArgs e)
{
OnRinging();
}
}
public class DllEventArgs : EventArgs
{
public string Name { get; set; }
}
}


Wat doet het :

Vanuit programma 1 wordt via het drukken op button 1 het tweede programma aan geroepen.
In programma 2 wordt een aktie gedaan waarmee we terug moeten springen naar het eerste programma. Dat wordt hier gedaan dmv van het drukken op een button. Daar moeten we een event op starten.

#3 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 349 berichten
    Laatst bezocht 21 sep 2017 14:37

Geplaatst op 22 juni 2016 - 21:25

Om vb.net op sommige plaatsten te converteren naar Csharp heb ik niet hiervoor gekozen.

Op het moment dat ik vanuit een menu een programma aanroep wordt het object van het aan te roepen programma toegevoegd aan;

cDataClass.LstScrnObj.Add(frm)

In de DLL cDataclass

Visual Basic Code:
 Public Property LstScrnObj As List(Of Object)
Get
If IsNothing(mLstScrnObj) Then
mLstScrnObj = New List(Of Object)
End If
Return mLstScrnObj
End Get
Set(value As List(Of Object))
mLstScrnObj = value
End Set
End Property

Op het moment dat ik vanuit een willekeurig programma wil terug naar een programma

Visual Basic Code:
 cDataClass.clsParam.ObjName = "IKKE"
cDataClass.clsParam.ObjSubName = ""
cDataClass.clsParam.ObjFunction = "CALLWPF"
cDataClass.clsParam.ObjData1 = sWPFID
cDataClass.clsParam.ObjData2 = ""

For Each item In cDataClass.LstScrnObj
_FormId = GetScrn(item.tag)

Select Case _FormId
Case Is = iFormId
item.StartScrn()
Exit For
End Select
Next

In elk programma is opnomen ;

Visual Basic Code:
 Public Sub StartScrn()
.... Some code
End Sub

Hierdoor wordt het event

Visual Basic Code:
rivate Sub frm.._Activated(sender As Object, e As EventArgs) Handles Me.Activated

In het event ..Activated:

Visual Basic Code:
 If cDataClass.clsParam.ObjName = "IKKE" Then
If cDataClass.clsParam.ObjFunction.TOUPPER = "CALLWPF" Then
CallWpf(cDataClass.clsParam.ObjData1)
cDataClass.NewParam()
End If

If cDataClass.clsParam.ObjSubName.TOUPPER = "GRIDANIMALS01" And cDataClass.clsParam.ObjFunction.TOUPPER = "SELROW" Then
GetDr(cDataClass.clsParam.ObjData1, cDataClass.clsParam.ObjData2)
cDataClass.NewParam()
End If
End If

For Each item In cDataClass.LstScrnObj
If eFormId.FromIdAnimals = cMain.SplitForScrn(item.tag) Then
item.topmost = True
Else
item.topmost = False
End If
Next

Dit lijkt omslachtig maar op het moment dat ik vanuit een willekeurig programma terug wil springen naar een programma wordt niet altijd in CsHarp / vb,net het event _Activated geactiveerd.
Dit moet wel gebeuren om het scherm op te roepen en het scherm topmost te krijgen.

Zeker als al scherm dynamisch worden opgebouwd vanuit de database.





Ook met taq WPF voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[WPF] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)