fosforo (Normal User)
Expert
Messaggi: 391
Iscritto: 06/04/2009
|
Ciao
Domanda probabilmente banale.
Ho creato una classe
public void MyXML()
La classe fa parsing di un file XML.
I ChildNodes che mi interessano li metto in un string array.
string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];
Non riesco a far vedere l'array alla classe Form1.
Grazie
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Ma Form1 come interagisce con l'altra classe?
E perché deve "vedere" l'array? I dati in genere sono privati in una classe e resi disponibili all'esterno tramite apposite proprietà/metodi.
Se non dai maggiori informazioni si deve interpellare la "sfera di cristallo" ... ma è in riparazione ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
fosforo (Normal User)
Expert
Messaggi: 391
Iscritto: 06/04/2009
|
Grazie nessuno
Nella Form1 istanzio la classe
MyXMLXMLP = new MyXML();
Da Form1 pensavo di poter accedere all'array:
string miastringa= XmlCache [1,0]
ma non funziona.
Magari faccio un errore ma posto la classe MyXML.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Windows.Forms;
namespace cs_FolderSync
{
class XMLparsing
{
public Array MyXML()
{
string Mypath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Mypath + @"\11.xml");
XmlNodeList xmlnode;
string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];
int i;
//string str;
xmlnode = xmlDoc.GetElementsByTagName("event"); //name XML element
//InnerText(0)=InnerText(1) start time=InnerText(2) clip_id=InnerText(3)
// cycle for ChildNodes into array
for (i = 0; i <= xmlnode.Count - 1; i++)
{
xmlnode.ChildNodes.Item(0).InnerText.Trim();
_XmlCache[i, 0] = xmlnode.ChildNodes.Item(0).InnerText.Trim();
_XmlCache[i, 1] = xmlnode.ChildNodes.Item(1).InnerText.Trim();
_XmlCache[i, 2] = xmlnode.ChildNodes.Item(2).InnerText.Trim();
}
return _XmlCache;
}
}
}
Grazie anticipatamente
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Ma scusa la classe si chiama
class XMLparsing
quindi che dici?
Semmai dovresti scrivere
XMLparsing MyXMLXMLP = new XMLparsing();
Array arr = MyXMLXMLP.MyXML();
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
fosforo (Normal User)
Expert
Messaggi: 391
Iscritto: 06/04/2009
|
Si è vero. Scusami
Sono solo test e faccio e rifaccio e alcune volte cambio nomi.
Ma il succo non cambia.
Il problema è che non riesco a esporre l'Array _XmlCache alle altre classi.
|
|
Ultimo (Member)
Guru
Messaggi: 877
Iscritto: 22/05/2010
|
Postato originariamente da fosforo:
Si è vero. Scusami
Sono solo test e faccio e rifaccio e alcune volte cambio nomi.
Ma il succo non cambia.
Il problema è che non riesco a esporre l'Array _XmlCache alle altre classi. |
Devi studiare come si creano le Classi (Oggetti) nel OOP
string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];
Devi dichiarare le proprietà di string[,] _XmlCache come Public
Codice sorgente - presumibilmente VB.NET |
public string[,] _XmlCache { get { return _XmlCache; } set { _XmlCache = value; } }
|
Ultima modifica effettuata da Ultimo il 01/05/2020 alle 9:58
If ok Then GOTO Avanza else GOTO Inizia
|
|
fosforo (Normal User)
Expert
Messaggi: 391
Iscritto: 06/04/2009
|
Infatti.
Piano piano ci stavo arrivando.
Avevo capito che dovevo usare il Getter and Setter che ancora adesso capisco poco.
In rete trovo mille cose ma molto incasinate.
Hai da darmi un sito dove spiega molto semplicemente cos'è e come utilizzarli?
Grazie 1000
|
|
Carlo (Member)
Guru
Messaggi: 1344
Iscritto: 29/01/2018
|
I consigli dati sono per scrivere un programma OOP, come si deve.
Capire e studiare è d'obbligo, i consigli di nessuno e Ultimo, se li metti in pratica, mantengono le variabili contenute nella Classe localizzate, evitando che altri parti del programma le modifichino, magari per errore.
C'è anche un metodo più diretto, che fa storcere un po' il naso a chi fa della programmazione OOP un sacro gral, ma siccome non è vietato, perseguibile.
Ti allego un esempio che fa nulla, solo per vedere come passare variabili e routine pubbliche tra le classi.
Ultima modifica effettuata da Carlo il 01/05/2020 alle 13:49
in programmazione tutto è permesso |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da Ultimo:
Postato originariamente da fosforo:
Si è vero. Scusami
Sono solo test e faccio e rifaccio e alcune volte cambio nomi.
Ma il succo non cambia.
Il problema è che non riesco a esporre l'Array _XmlCache alle altre classi. |
Devi studiare come si creano le Classi (Oggetti) nel OOP
string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];
Devi dichiarare le proprietà di string[,] _XmlCache come Public
Codice sorgente - presumibilmente VB.NET |
public string[,] _XmlCache { get { return _XmlCache; } set { _XmlCache = value; } }
|
|
Devi studiare da un libro la teoria della OOP.
Altro che tutorial e siti. Lascia stare il linguaggio ed internet e STUDIA CORRETTAMENTE la TEORIA prima di tutto.
O avrai sempre una enorme confusione perché la questione non è semplice e i concetti complessi se non li studi.
Poi fai come vuoi
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|