Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jaroslav Malý:25.7.2017 13:27

Ahoj všem,
právě jsem se registroval :)
Programoval jsem pouze ve VB4-6 před čtvrt stoletím a Z80 na mem prvním osobku ZX81 o neco dříve :-)
Nyní mám problém v C#. Zvládl jsem hravě dle zdejších návodů (a děkuji za ně) napojení na MSSQL,
ale mám problém s metodami a meziformulářovým voláním kvuli nastavení prvků.

Programuji v nástroji HMI Builder PRO pro řízení PLC a pohonů SEW.

První obrazovka má na sobě prvky pro řízení linky a má tuto strukturu :

namespace Neo.Applicati­onFramework.Ge­nerated
{
using System.Window­s.Forms;
using System;
using System.Drawing;

using Neo.Applicati­onFramework.To­ols;
using Neo.Applicati­onFramework.Com­mon.Graphics.Lo­gic;
using Neo.Applicati­onFramework.Con­trols;
using Neo.Applicati­onFramework.In­terfaces;

// moje nove
using System.Threading;
using System.Data.SqlCli­ent;

public partial class GeneralScreen
{
void GeneralScreen_O­pened(System.Ob­ject sender, System.EventArgs e) // tady neco delam pri startu
{
Globals.Tags.A­UTO_Off_bit.Va­lue = true; // PRI STARTU ZAPNI POLOAUTOMAT
Application.Do­Events();
Thread.Sleep(500); // chvilicku cekej
Application.Do­Events();

OtevriDatabazi(); // volam v pohode SQL

}
void Button9_Mouse­Down(System.Ob­ject sender, System.Window­s.Forms.Mouse­EventArgs e) // udalost tlacitka
{
SchovejPrvky();
// MessageBox.Show("Nas­tavuji ukol zvaz");
Globals.Tags.RBG_Job_VA­HA_bit.Value = true;
Thread.Sleep(500); // chvilicku cekej
Globals.Tags.RBG_Job_STAR­T_bit.Value = true;
// zobrazit prvky musi pri udalosti change tagu >>> musi byt az pri mode = 0
}

// =============­=========== METHODS =============­========================­===============

public void SchovejPrvky() // priklad metody bez promenny
{
Button10.Visible = false;
Button3.Visible = false;
Button6.Visible = false;
Button7.Visible = false;
Button8.Visible = false;
Button9.Visible = false;
CheckBox.Visible = false;
AnalogNumeric4­.IsEnabled = false;
Application.Do­Events(); // refresh
}

public void ZobrazPrvky() // toto se musi volat pri udalosti zmeny tagu z x na 0
{
Button10.Visible = true;
Button3.Visible = true;
Button6.Visible = true;
Button7.Visible = true;
Button8.Visible = true;
Button9.Visible = true;
CheckBox.Visible = true;
AnalogNumeric4­.IsEnabled = true;
}
}

}

A zde je modul TAGů čili komunikace s PLC

namespace Neo.Applicati­onFramework.Ge­nerated
{
using System.Window­s.Forms;
using System;
using System.Drawing;
using Neo.Applicati­onFramework.To­ols;
using Neo.Applicati­onFramework.Com­mon.Graphics.Lo­gic;
using Neo.Applicati­onFramework.Con­trols;
using Neo.Applicati­onFramework.In­terfaces;

public partial class Tags
{

int TagModMem = 0;
// Globals.General­Screen DPC = new Globals.General­Screen(); ne
// GeneralScreen(Zo­brazPrvky()); ne
// Globals.General­Screen.Unvisi­ble(); nefacha

void MODE_Int_Valu­eChange(System­.Object sender, Neo.Applicati­onFramework.In­terfaces.Even­ts.ValueChange­dEventArgs e)
{
// MessageBox.Show("Zme­na mode"); ok

int TagMod = MODE_Int.Value;
if(TagMod == 0 & TagModMem > 0) //mod skoci z nenuly na nulu
{

//xxx = new Application.Run("Zo­brazPrvky"); nejde

// zde tapu a nevim jak zavolat metodu z prvni obrazovky
//ZobrazPrvky zp = new Globals.General­Screen( ??? fakt nevim

// MessageBox.Show("BAF");

}
TagModMem = TagMod;
}

}

}

Prosím o radu jak buď
1) z tridy Tags a udalosti void MODE_Int_Valu­eChange ovladat prvky (visible) na prvni obrazovce,
napr. Button10.Visible = true;
nebo

  1. jak zavolat metodu ZobrazPrvky opet z prvni obrazovky

Děkuji mnohokrát předem, kdo mi pomůže a ztratí se mnou čas

Jarda Malý, 46 let

 
Odpovědět
25.7.2017 13:27
Avatar
Jan Sála
Tvůrce
Avatar
Jan Sála:25.7.2017 14:36

Zdravím, vyrobil jsem pro vás takový mini návod. To co potřebujete jsou eventy. Té vaší třídě Tag musíte vytvořit EventHandler a poté z formuláře do něj vložit metod, která bude volat buď ZobrazitPrvky() nebo něco dalšího co potřebujete.

Na tomto odkaze je miniapliakce, která jeden takový event používá, snažil jsem se použít hodně z vašeho kodu, ale neám žádné vae tříy, tak to snad takto postačí.

https://www.itnetwork.cz/dev-lighter/957

Nahoru Odpovědět
25.7.2017 14:36
Když nevím co s tím, tak je chyba v compileru.
Avatar
Pavel Novák
Člen
Avatar
Odpovídá na Jaroslav Malý
Pavel Novák:25.7.2017 21:14

Nejlepší rada pro tebe asi bude: něco si o C# nastuduj a pak se teprve snaž upravovat něčí kód.

Evidentně podle tvých pokusů v komentářích nemáš o problematice ani šajn.

Obecně - chceš li používat metodu jakékoliv třídy v jiné třídě - máš dvě možnosti:

buď musíš si vytvořit za pomocí new její instanci

GeneralScren generalScreen = new GeneralScreen();
//pak můžeš volat její metodu
generalScreen.ZobrazPrvky();

nebo musíš metodu deklarovat jako statickou

public static void ZobrazPrvky()
{
........
.......
......
}

pak ji můžeš volat přímo bez instance

GeneralScreen.ZobrazPrvky();

pokud se chceš věnovat programování v C# nějak víc, tak věnuj čas minimálně základům jazyka

pokud ale na tebe jenom něco spadlo v práci, protože to nikdo neumí a nic víc dělat nebudeš tak někam postni celý kód - ne útržky a popis co by to mělo dělat - pak ti určitě někdo pomůže s řešením

 
Nahoru Odpovědět
25.7.2017 21:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.