我有一个父表单first.cs喜欢这个
public partial class first : Form
{
public Graph graphi { get; }
Graph g = new Graph();
string s1 = null;
private void button1_Click(object sender, EventArgs e)
{
Stream myStream = null;
var parser = new Notation3Parser();
var graph = new Graph();
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "RDF files (*.n3)|*.n3";
openFileDialog1.FilterIndex = 1;
openFileDialog1.RestoreDirectory = true;
openFileDialog1.Multiselect = false;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
string s = openFileDialog1.FileName.ToString();
string w = Directory.GetCurrentDirectory().ToString();
string Fname = openFileDialog1.SafeFileName.ToString();
File.Copy(s, Path.Combine(w, Fname), true);
// Insert code to read the stream here.
Win32.AllocConsole();
s1 = Path.Combine(w, Fname);
showPath.Text = s1;
String parentvalueadress = this.s1;
showPath.Visible = true;
insertNodeButton.Visible = true;
delBut.Visible = true;
showNodes showNodes1 = new showNodes(s1);
g = showNodes1.returngraph();
Console.Read();
Win32.FreeConsole();
this.Show();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
}
private void insertNodeButton_Click(object sender, EventArgs e)
{
addTriple a1 = new addTriple();
a1.BringToFront();
a1.ShowDialog();
g.SaveToFile(this.s1);
}
private void button3_Click(object sender, EventArgs e)
{
delete a1 = new delete();
a1.BringToFront();
a1.ShowDialog();
}
}
在insertNodeButton_Click方法中的我想将图形g的值传递给子表单,它的代码是这样的:
public partial class addTriple : Form
{
Graph gr;
String childvalueadress;
private void addTriple_Load(object sender, EventArgs e)
{
var parser = new Notation3Parser();
var graph = new Graph();
gr = graph;
parser.Load(graph, childvalueadress);
}
private void subComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (subComboBox.SelectedItem.ToString() == "URI")
{
subUriTB.Visible = true;
label1.Visible = true;
}
else
{
subUriTB.Visible = false;
label1.Visible = false;
}
}
private void objComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if ((objComboBox.SelectedItem.ToString() == "URI") || (objComboBox.SelectedItem.ToString() == "Literal"))
{
objUriTB.Visible = true;
label1.Visible = true;
}
else
{
objUriTB.Visible = false;
label1.Visible = false;
}
}
private void addTripleButton_Click(object sender, EventArgs e)
{
if (subComboBox.Text.ToString() == "select" || objComboBox.Text.ToString() == "select")
MessageBox.Show("please select node types");
else if ((subComboBox.SelectedItem.ToString() == "URI") && (subUriTB.Text.ToString() == ""))
MessageBox.Show("please fill text box for URI");
else if ((preUriTB.Text.ToString() == ""))
MessageBox.Show("please fill text box for URI");
else if ((objUriTB.Text.ToString() == "") && ((objComboBox.SelectedItem.ToString() == "URI") || (objComboBox.SelectedItem.ToString() == "Literal")))
MessageBox.Show("please fill text box for object name");
else if ((objComboBox.SelectedItem.ToString() == "URI") && (objUriTB.Text.ToString() == ""))
MessageBox.Show("please fill text box for URI");
try
{
if ((subComboBox.Text.ToString() == "URI") && (objComboBox.Text.ToString() == "URI"))
addUUU(subUriTB.Text.ToString(), preUriTB.Text.ToString(), objUriTB.Text.ToString(), gr);
else if ((subComboBox.Text.ToString() == "URI") && (objComboBox.Text.ToString() == "Literal"))
addUUL(subUriTB.Text.ToString(), preUriTB.Text.ToString(), objUriTB.Text.ToString(), gr);
else if ((subComboBox.Text.ToString() == "Blank") && (objComboBox.Text.ToString() == "Literal"))
addBUL(preUriTB.Text.ToString(), objUriTB.Text.ToString(), gr);
else if ((subComboBox.Text.ToString() == "URI") && (objComboBox.Text.ToString() == "Blank"))
addUUB(subUriTB.Text.ToString(), preUriTB.Text.ToString(), gr);
}
catch
{
MessageBox.Show("please correct the uri");
}
gr.SaveToFile("c:\\n.n3");
}
}
并在此子窗体中使用此值,然后将其传递给父窗体first.cs
我该怎么做?
答案 0 :(得分:4)
为子表单定义Property
// In Parent Form
addTriple a1 = new addTriple();
a1.G = graphicdata //assign graphic data here
a1.BringToFront();
a1.ShowDialog();
g.SaveToFile(this.s1);
// In Child Form
public Graph G
{
get { return gr; }
set { gr = value; }
}
现在您可以访问此任意内容并在显示表单之前为其分配数据
答案 1 :(得分:3)
有两种可能的方法。一种是在子表单中保存对父表单的引用。或者另一种是向子表单添加属性。
<强>参考强>
将成员变量添加到类型为first
的addTriple类中e.g。
first _parent;
将addTriple表单上的构造函数更改为以下
public addTriple(first p, Graph g)
{
_parent = p;
this.Graph = g; //now you have a reference to the graph from the original form.
}
显示新表单时,请使用以下代码:
addTriple a1 = new addTriple(this, g); //g being the graph you wish to use in the modal form.
a1.BringToFront();
a1.ShowDialog();
<强>属性强>
向addTriple类添加属性
public Graph Graph {get;set;}
然后显示表格使用以下
addTriple a1 = new addTriple(); //create a new instance of the form
a1.Graph = this.Graph; //set the graph to the one from the parent form
a1.ShowDialog(); //show the form as a dialog
this.Graph = a1.Graph; // once the form is closed get the changed graph back to the parent.
答案 2 :(得分:0)
////为addTriple表单创建一个这样的构造函数,并将Graph对象作为referance传递
public addTriple(ref Graph g)
{
InitializeComponent();
//can access g here ......
}
然后从主窗体
中调用它 private void insertNodeButton_Click(object sender, EventArgs e)
{
addTriple a1 = new addTriple(ref g);
a1.BringToFront();
a1.ShowDialog();
//New g will be available here
g.SaveToFile(this.s1);
}
不知道这是否是最好的方法