我正在以第一种形式创建和添加对象到字典。 我想以第二种形式搜索它,因为我想根据第一种形式创建的对象在面板上绘制符号。
我看到了这个 topic但我不知道,我如何向Form2添加构造函数,将Form作为参数?
我试图制作单例字典,但我也不知道如何从foreach循环中的字典中获取值。
当每个人都采用相同的形式时,我应该通过以下方式制作:luskanie.value.rodzaj,如果我有两种形式,那么它不起作用。
form1字典中的代码:
public partial class Form1 : Form
{
public static Dictionary<int, baza> naszalista = new Dictionary<int, baza>();
This is second form:
namespace _1dwa3
{
public partial class diagram : Form
{
public diagram()
{
InitializeComponent();
}
private void diagram_Load(object sender, EventArgs e)
{
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
SolidBrush laczniki = new SolidBrush(Color.Gray);
Pen lacznikipen = new Pen(Color.Gray, 5);
SolidBrush funkcja = new SolidBrush(Color.Green);
Pen funkcjapen = new Pen(Color.Green, 5);
SolidBrush zdarzenie = new SolidBrush(Color.Red);
Pen zdarzeniepen = new Pen(Color.Red, 5);
SolidBrush strzalka = new SolidBrush(Color.Black);
Graphics rysujem = panel1.CreateGraphics();
foreach (KeyValuePair<int, baza> luskanie in Form1.naszalista)
{
if (baza.rodzaj == "funkcja")
{
rysujem.FillEllipse(funkcja,20,20,40,20);
rysujem.DrawString(funkcjazdarzenie.opis, new Font("Segoe", 9), Brushes.Green, 20, 20);
}
else if (baza.rodzaj == "zdarzenie")
{
rysujem.FillPie(zdarzenie,20,20,20,20,20,20);
}
else if (baza.rodzaj == "XOR")
{
}
else if (baza.rodzaj == "OR")
{
}
else if (baza.rodzaj == "AND")
{
}
}
}
}
}
对于任何建议,我试图让这个问题具体化。
我在这里添加,还有简短描述的课程
public class baza /* this is superior class, it contains rodzaj = which give me opportunity, to know which shape shold be printed, idpoprzedniego give me chance to know after which shape it should be printed */
{
public string rodzaj;
public int idpoprzedniego;
}
现在是从baza继承的类,它有一个构造函数并且有一个新的字符串opis =,其中包含描述action的文本。例如“老板需要签署文件”
public class funkcjazdarzenie : baza //
{
public string opis;
public funkcjazdarzenie(string krodzaj, string kopis, int kidpoprzedniego)
{
rodzaj = krodzaj;
idpoprzedniego = kidpoprzedniego;
opis = kopis;
}
}
Xor / Or /并且在插图上有相同的符号它将是圆形,但它们之间的差异将在形状中间的文本中,就像类的名称一样xor /或/和
public class xor : baza //klasa odpowiedzialna za xora
{
public xor(string krodzaj,int kidpoprzedniego)
{
rodzaj = krodzaj;
idpoprzedniego = kidpoprzedniego;
}
}
public class or : baza //klasa odpowiedzialna za ora
{
public or(string krodzaj,int kidpoprzedniego)
{
rodzaj = krodzaj;
idpoprzedniego = kidpoprzedniego;
}
}
public class and : baza // klasa odpowiedzialna za and
{
public and(string krodzaj,int kidpoprzedniego)
{
rodzaj = krodzaj;
idpoprzedniego = kidpoprzedniego;
}
}
答案 0 :(得分:0)
要在两个表单之间发送值,您可以
第二种形式,
public Form1 objForm1;
并以First Form形式,
Form2 objForm2=new Form2();
Form2.objForm1=this;
然后你可以使用Form2的objForm1来引用Form1的字典项
//Form1.Dict_Name=values;
答案 1 :(得分:0)
您已将Form1中的Dictionary设置为静态,并且正在从Form2正确访问它。问题出在你的For循环中。 “luskanie”变量代表KeyValuePair,因此您应该使用它来访问“rodzaj”成员。
所以而不是:
if (baza.rodzaj == "funkcja")
你应该:
if (luskanie.Value.rodzaj == "funkcja")
总之,你可以看起来像:
private void panel1_Paint(object sender, PaintEventArgs e)
{
SolidBrush laczniki = new SolidBrush(Color.Gray);
Pen lacznikipen = new Pen(Color.Gray, 5);
SolidBrush funkcja = new SolidBrush(Color.Green);
Pen funkcjapen = new Pen(Color.Green, 5);
SolidBrush zdarzenie = new SolidBrush(Color.Red);
Pen zdarzeniepen = new Pen(Color.Red, 5);
SolidBrush strzalka = new SolidBrush(Color.Black);
Graphics rysujem = panel1.CreateGraphics();
foreach (KeyValuePair<int, baza> luskanie in Form1.naszalista)
{
baza bz = luskanie.Value;
if (bz.rodzaj == "funkcja")
{
rysujem.FillEllipse(funkcja, 20, 20, 40, 20);
rysujem.DrawString(funkcjazdarzenie.nazwa, new Font("Segoe", 9), Brushes.Green, 20, 20);
}
else if (bz.rodzaj == "zdarzenie")
{
rysujem.FillPie(zdarzenie, 20, 20, 20, 20, 20, 20);
}
else if (bz.rodzaj == "XOR")
{
}
else if (bz.rodzaj == "OR")
{
}
else if (bz.rodzaj == "AND")
{
}
}
}