Мне нужно добавлять данные в XML-файл каждый раз, когда происходит событие мыши!вот мой код, я объясню вам лучше после того, как вы взгляните на него.
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (radioButton1.Checked==true)
{
if (a > 3 && a < 11)
{
rect.Width = 0;
rect.Height = 0;
pictureBox1.Invalidate();
raghu = img.imageToByteArray(pictureBox1.Image);
int radius = 10; //Set the number of pixel you want to use here
//Calculate the numbers based on radius
int x0 = Math.Max(e.X - (radius / 2), 0),
y0 = Math.Max(e.Y - (radius / 2), 0),
x1 = Math.Min(e.X + (radius / 2), pictureBox1.Width),
y1 = Math.Min(e.Y + (radius / 2), pictureBox1.Height);
Bitmap bm = pictureBox1.Image as Bitmap; //Get the bitmap (assuming it is stored that way)
for (int ix = x0; ix < x1; ix++)
{
for (int iy = y0; iy < y1; iy++)
{
bm.SetPixel(ix, iy, Color.Black); //Change the pixel color, maybe should be relative to bitmap
}
}
pictureBox1.Refresh(); //Force refresh
//calculation part.
float u = l[p + 1] - l[p];
float v = m[p + 1] - m[p];
float w = (e.Y - m[p]) / v;//subtract from latitude
float z = (e.X - l[p]) / u;//add to longitude.
float latmin = h[p] - w;
float longmin = j[p] + z;
A1 = e.X - c[p];
A2 = e.Y - d[p];
B1 = c[p + 1] - c[p];
B2 = d[p + 1] - d[p];
A = Math.Sqrt(Math.Pow(A1, 2) + Math.Pow(A2, 2));
B = Math.Sqrt(Math.Pow(B1, 2) + Math.Pow(B2, 2));
dotproduct = A1 * B1 + A2 * B2;
theta = (180 / Math.PI) * Math.Acos(dotproduct / (A * B));
if (e.X < c[p])
{
theta1 = 360 - theta;
}
else
{
theta1 = theta;
}
textBox2.Text = string.Format("Latitude:{0}°{1}'{2}''\n Longitude:{3}°{4}'{5}'' \n ICAO LOC: {6} {7} \n Distance: {8:0.0} Nm", g[p] + (int)latmin / 60, (int)latmin % 60,(int) (((h[p]-w) % 60 - (int)(latmin % 60)) * 60), i[p] + (int)longmin / 60, (int)longmin % 60, (int)((longmin % 60 - (int)(longmin % 60)) * 60), textBox1.Text, Math.Abs((int)theta1), Math.Sqrt(Math.Pow((A1/u)* 60, 2) + Math.Pow((A2/v) * 60, 2)));
Существует большая часть вычислений, которая сейчас не нужна. Но данные, которые я собираюсь напечатать в textBox2(последняя строка кода) важно. все напечатанные там данные должны добавляться в файл XML каждый раз, когда я щелкаю мышью по картинке ...
, поэтому я попытался реализовать с помощью xdocument с помощьюдобавив этот путь ..
XDocument xdoc = XDocument.Load(string.Format("{0}.xml", textBox3.Text));
XElement ParentNode= xdoc.Root.Element(string.Format("{0}",radioButton1.Text));
XElement node= new XElement("WayPoints",new XElement("LatitudeDegrees",g[p] + (int)latmin / 60 ,
new XAttribute("Minutes",(int)latmin % 60),
new XAttribute("Seconds",(int)(((h[p] - w) % 60 - (int)(latmin % 60)) * 60)),
new XElement("LongitudeDegrees",i[p] + (int)longmin / 60,
new XAttribute("Minutes",(int)longmin % 60),
new XAttribute("seconds",(int)((longmin % 60 - (int)(longmin % 60)) * 60)),
new XElement ("IcaoLocator",textBox1.Text,
new XAttribute("angle",Math.Abs((int)theta1)),
new XElement("DistanceInNauticalMiles",Math.Sqrt(Math.Pow((A1 / u) * 60, 2) + Math.Pow((A2 / v) * 60, 2))
)))));
ParentNode.Add(node);
xdoc.Save(string.Format("{0}.xml", textBox3.Text));
Но проблема в том, что он говорит, что корневой элемент отсутствует.
На самом деле файл, который я загружаю в Xdocument, уже создан, я его уже создал
using (XmlWriter writer = XmlWriter.Create(string.Format("{0}.xml", textBox3.Text)))
{
}
ранее здесь, как это (потому что я боюсь, что если создать его, создается в Picturebox_Mouseclick, он перезаписывается)
private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (a > 1 && a <= 3)
{
c[f] = e.X;
d[f] = e.Y;
a++;
f++;
}
using (XmlWriter writer = XmlWriter.Create(string.Format("{0}.xml", textBox3.Text)))
{
}
}
Не беспокойтесь, если вы не понимаете вычисления, его характерно длямои потребности мне нужно только распечатать данные в XML-файл .. пожалуйста, любой любезно помогите мне ..
один из примеров путевой точки здесь
<?xml version="1.0" encoding="UTF-8"?>
<WayPoints>
<Latitude>
<Degrees>48</Degrees>
<Minutes>31.7363644</Minutes>
</Latitude>
<Longitude>
<Degrees>11</Degrees>
<Minutes>57.53425</Minutes>
</Longitude>
<IcaoLocator>
<Type>EDML</Type>
<Angle>288</Angle>
<DistanceInPixels>346</DistanceInPixels>
</IcaoLocator>
</WayPoints>
, но он содержит только один способточка ... Мне нужно добавить много путевых точек в этот файл XML.