PDA

View Full Version : Help Visual C#


jack0.1
07-11-2006, 10:08
Ho creato una form "Main" con cui voglio visualizzare altri due form "PannA" e "PannB" che ho creato con la funzione di Visual C# Add Windows Form; ho creato due semplici bottoni, ma quando è il momento di chiamare i due form "A" e "B" mi dice che non sono stati iniziallizzati. Come risolvo?
Grazie in anticipo

Riordian
07-11-2006, 11:02
non avrai utilizzato il new per inizializzali, se posti il codice forse si riesce ad essere più precisi ;)

jack0.1
07-11-2006, 13:01
ehm.... :D :D :D :D :D
adesso funziona ma mi sa che ho fatto casino lo stesso :mc:

Questo per il Main

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Generazione_albero
{
public partial class Main : Form
{
Form panA = new PannelloA();
Form panB = new PannelloB();

public Main()
{
InitializeComponent();


}

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Text == "PannelloA")
panA.ShowDialog();
if (e.Node.Text == "PannelloB")
panB.ShowDialog();

}

private void MainClick(object sender, EventArgs e)
{

}

private void PannelloAClick(object sender, EventArgs e)
{

panA.ShowDialog();

}

private void PannelloBClick(object sender, EventArgs e)
{

panB.ShowDialog();
}



}
}


Questo è per il PannelloA

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace Generazione_albero
{
public partial class PannelloA : Form
{
public PannelloA()
{
InitializeComponent();

}

private void PannelloA_Load(object sender, EventArgs e)
{
// Initialize the controls and the form.
label1.Text = "File Path";
label1.SetBounds(8, 8, 50, 20);
textBox1.Text = Application.StartupPath + "\\Sample.xml";
textBox1.SetBounds(64, 8, 256, 20);
button1.Text = "Populate the TreeView with XML";
button1.SetBounds(8, 40, 200, 20);
this.Text = "TreeView control from XML";
this.Width = 336;
this.Height = 368;
treeView1.SetBounds(8, 72, 312, 264);
}

private void button1_Click(object sender, EventArgs e)
{
try
{
// SECTION 1. Create a DOM Document and load the XML data into it.
XmlDocument dom = new XmlDocument();
dom.Load(textBox1.Text);

// SECTION 2. Initialize the TreeView control.
treeView1.Nodes.Clear();
treeView1.Nodes.Add(new TreeNode(dom.DocumentElement.Name));
TreeNode tNode = new TreeNode();
tNode = treeView1.Nodes[0];

// SECTION 3. Populate the TreeView with the DOM nodes.
AddNode(dom.DocumentElement, tNode);
treeView1.ExpandAll();
}
catch (XmlException xmlEx)
{
MessageBox.Show(xmlEx.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList nodeList;
int i;

// Loop through the XML nodes until the leaf is reached.
// Add the nodes to the TreeView during the looping process.
if (inXmlNode.HasChildNodes)
{
nodeList = inXmlNode.ChildNodes;
for(i = 0; i<=nodeList.Count - 1; i++)
{
xNode = inXmlNode.ChildNodes[i];
inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
tNode = inTreeNode.Nodes[i];
AddNode(xNode, tNode);
}
}
else
{
// Here you need to pull the data from the XmlNode based on the
// type of node, whether attribute values are required, and so forth.
inTreeNode.Text = (inXmlNode.OuterXml).Trim();
}
}
}
}

Riordian
07-11-2006, 16:02
purtroppo non ho il tempo per analizzarlo essendo a lavorare ma:
hai qualche dubbio sul tuo codice?
non funziona?
in che senso hai combinato un casino?

P.S. Stai usando il 2.0 vedo.
Noi qua in ditta siamo fermi ancora all'1.1 spero in un prossimo progetto di utilizzare il 2.0.

jack0.1
08-11-2006, 08:31
Si in ufficio noi usiamo la 2.0;
penso di aver fatto casino nel senso che sono riuschito a far funzionare il tutto con queste righe

Form panA = new PannelloA();
Form panB = new PannelloB();

panA.ShowDialog();
panB.ShowDialog();

le ho inserite nell'even del Main, ma leggendo ho visto che si dovrebbe usare un'altra costruzione, probabilmente la dialog box, ma ci ho capito poco perchè a visual non ci sono abituato e non trovo il punto di codice dove crea i form

Riordian
08-11-2006, 08:47
Sono sempre di corsa comunque intanto non capisco perche hai usato la dichiarazione
Form panA = new PannelloA()
Form panB = new PannelloB()
io avrei dichiarato
PannelloA panA = new PannelloA()
PannelloB panB = new PannelloB()

cmq poi appena ho un po' di calma provo a vedere meglio.
Poi se qualcun'altro mi anticipa meglio :)

jack0.1
08-11-2006, 08:54
Grazie per l'aiuto :D

Riordian
08-11-2006, 11:30
di nulla, cmq non capisco le tue remore sui form, per le applicazioni windows la form class è la classe base delle windows che si creano nel progetto (a meno che nel 2.0 non sia cambiato qualche cosa ma non penso) ;)

jack0.1
08-11-2006, 11:51
Non ho nessun problema con i form è solo che non trovo un punto nel codice generato dove viene scritto
Form PannelloA = new Form();

e mi aspetterei di trovarlo.

0rph3n
08-11-2006, 12:30
Non ho nessun problema con i form è solo che non trovo un punto nel codice generato dove viene scritto
Form PannelloA = new Form();

e mi aspetterei di trovarlo.
perchè ti aspetteresti di trovarlo? :mbe:
io non ne vedo il senso, per farti un esempio, quando crei una nuova classe di nome miaNuovaClasse, mica viene scritto da qualche parte nel codice
Class miaNuovaClasse = new Class();

'iao

Riordian
08-11-2006, 12:33
Non ho nessun problema con i form è solo che non trovo un punto nel codice generato dove viene scritto
Form PannelloA = new Form();

e mi aspetterei di trovarlo.

no aspetta forse hai un po' di confusione.
PannelloA è un tipo che te hai creato tramite visual studio.
Dovresti avere da qualche parte (mi aspetterei un file PanneloA.cs)
in cui hai una definizione simile a quella sotto:

public class PannelloA:Form
{
...........
}


cioè una definizione di una Classe PannelloA che eredita la classe Form.
Poi tramite la definizione PannelloA panA dichiari un oggetto di tipo PannelloA
A questo punto lo inizializzi con panA = new PannelloA()
la formula in una riga è proprio PannelloA panA = new PannelloA()

la riga che hai scritto: Form PannelloA = new Form() non la troverai mai
così dichiareresti un oggetto pannelloA di Tipo Form e lo inizializzeresti
ma non è ciò che serve nella tua applicazione ;)

jack0.1
08-11-2006, 13:06
Hai perfettamente ragione, ho fatto esattamente la procedura che hai descritto;
abbi pazienza ma non conosco ne c# ne Visual e sto imparandolo ora :D
Quindi la dialog box non mi serve?

RaouL_BennetH
08-11-2006, 13:36
io credo che semplicemente, solo nell'evento dei bottoni, dovresti scrivere questo codice:




//supposto che i bottoni si chiamino "button1" e "button2"

private void button1_Click(object sender, Eventargs e)
{
Form PannelloA = new Form()
PannelloA.Show();
}

//stessa cosa per il secondo form

jack0.1
08-11-2006, 13:50
Bene, allora è corretto quello che ho fatto. :D
Grazie

Riordian
08-11-2006, 14:13
io credo che semplicemente, solo nell'evento dei bottoni, dovresti scrivere questo codice:




//supposto che i bottoni si chiamino "button1" e "button2"

private void button1_Click(object sender, Eventargs e)
{
Form PannelloA = new Form()
PannelloA.Show();
}

//stessa cosa per il secondo form



no così non va bene, è quello che dicevo prima se mai

private void button1_Click(object sender, Eventargs e)
{
PannelloA panA= new PannelloA()
panA.ShowDialog();
}

Ma così non avrebbe visione di panA o panB in altre parti della classe ;)
e lui le due form le usa anche in

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Text == "PannelloA")
panA.ShowDialog();
if (e.Node.Text == "PannelloB")
panB.ShowDialog();

}
:)

P.S. @jack Appena ho tempo ti rispondo al PVT ;)

jack0.1
08-11-2006, 14:41
Ho corretto funziona tutto perfettamente :cincin:

Riordian
08-11-2006, 14:48
Ho corretto funziona tutto perfettamente :cincin:

ma non funzionava già prima? :confused:

jack0.1
08-11-2006, 16:26
si ma ho modificato il codice dichiarando i form esternamente all'even; più comodo :D