Guest User

Untitled

a guest
Jun 30th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.15 KB | None | 0 0
  1. Надо передать данные из одной формы в другую, возникает ошибка ("Необработанное исключение типа "System.NullReferenceException" в GeoForm.exe Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.")
  2.  
  3. public partial class Form1 : Form
  4. {
  5. MainForm mainForm;
  6.  
  7. public Form1()
  8. {
  9. InitializeComponent();
  10. }
  11.  
  12. public string Text1 { get; set; }
  13. public string Text2 { get; set; }
  14. public string Text3 { get; set; }
  15. public string Text4 { get; set; }
  16.  
  17. private void textBox1_TextChanged(object sender, EventArgs e)
  18. {
  19. Text1 = textBox1.Text;
  20. }
  21.  
  22. private void textBox2_TextChanged(object sender, EventArgs e)
  23. {
  24. Text2 = textBox2.Text;
  25. }
  26.  
  27. private void textBox3_TextChanged(object sender, EventArgs e)
  28. {
  29. Text3 = textBox3.Text;
  30. }
  31.  
  32. private void textBox4_TextChanged(object sender, EventArgs e)
  33. {
  34. Text4 = textBox4.Text;
  35. }
  36. private void button1_Click(object sender, EventArgs e)//ок
  37. {
  38. List<string> str = new List<string>();
  39. str.Add(Text1);
  40. str.Add(Text2);
  41. str.Add(Text3);
  42. str.Add(Text4);
  43. mainForm = new MainForm();
  44. MyEvent evnt = new MyEvent();
  45. evnt.OkEvent += new EventHandler<MyEventArgs>(mainForm.createProjectsForm1);
  46. evnt.OnOkEvent(str);
  47. Hide();
  48. }
  49.  
  50. private void button2_Click(object sender, EventArgs e)//отмена
  51. {
  52. Text1 = "";
  53. Text2 = "";
  54. Text3 = "";
  55. Text4 = "";
  56. Hide();
  57. }
  58.  
  59. private void Form1_Load(object sender, EventArgs e)
  60. {
  61. Text1 = "";
  62. Text2 = "";
  63. Text3 = "";
  64. Text4 = "";
  65. }
  66.  
  67. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  68. {
  69. e.Cancel = true;
  70. Hide();
  71. }
  72. }
  73. }
  74.  
  75. static class Program
  76. {
  77. /// <summary>
  78. /// Главная точка входа для приложения.
  79. /// </summary>
  80. [STAThread]
  81. static void Main()
  82. {
  83. Model model1 = new Model();
  84. MainForm view1 = new MainForm();
  85. Controller cnt1 = new Controller(view1, model1);
  86. Application.EnableVisualStyles();
  87. Application.Run(view1);
  88. }
  89. }
  90.  
  91. public partial class MainForm : Form, IView, IModelObserver
  92. {
  93. IController controller;
  94.  
  95. bool continueRecord = false;
  96. bool defaultPortConnect = false;
  97. LineItem currentCurve = null;
  98. PointPair firstPoint = null;
  99. bool openPort = false;
  100. bool startDrawing = false;
  101. int drawingPointCount = 0;
  102.  
  103. public void setController(IController cont)
  104. {
  105. controller = cont;
  106. }
  107.  
  108. Form Form1;
  109.  
  110. public MainForm()
  111. {
  112. InitializeComponent();
  113. zedGraph.IsEnableZoom = flse;
  114. zedGraph.ContextMenuStrip.Dispose();
  115. DrawFirstList(zedGraph);
  116. }
  117.  
  118. private void MainForm_Load(object sender, EventArgs e)
  119. {
  120. labelPressure.Text = "0,0";
  121. pictureBox2.Visible = true;
  122. btnRecord.Enabled = false;
  123. try
  124. {
  125. controller.GetDefaultPort();
  126. }
  127. catch
  128. {
  129. MessageBox.Show("COM-портов не обнаружено!", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error);
  130. }
  131. }
  132. private void toolStripMenuItem1_Click(object sender, EventArgs e)
  133. {
  134. string newNameStr;
  135. Form1.Input1(out newNameStr);
  136. Form1 = new Form1();
  137. Form1.Owner = this;
  138. Form1.Show();
  139. }
  140.  
  141. public void createProjectsForm1(object sender, MyEventArgs e)
  142. {
  143. controller.CreateProjects(e.textBox);// ошибка
  144. }
  145.  
  146. }
  147.  
  148. namespace GeoForm
  149. {
  150. delegate void ModelHandler<IModel>(IModel sender, EventArgs e);
  151. delegate void ModelHandlerGetDefaultPort<IModel>(IModel sender, ModelEventGetDefaultPort e);
  152. delegate void ModelHandlerComConnect<IModel>(IModel sender, ModelEventComConnect e);
  153. delegate void ModelHandlerSaveReport<IModel>(IModel sender, ModelEventSaveReport e);
  154. delegate void ModelHandlerTimeRecord<IModel>(IModel sender, ModelEventTimeRecord e);
  155. delegate void ModelHandlerBeginRecord<IModel>(IModel sender, ModelEventBeginRecord e);
  156. delegate void ModelHandlerPortClosed<IModel>(IModel sender, ModelEventPortClosed e);
  157. delegate void ModelHandlerCreateProjects<IModel>(IModel sender, CreateProjectsEventArgs e);
  158.  
  159. public class CreateProjectsEventArgs
  160. {
  161. List<string> text = new List<string>();
  162. List<double> value = new List<double>();
  163. List<double> dataTime = new List<double>();
  164. public CreateProjectsEventArgs(List<string> text, List<double> dataTime, List<double> value)
  165. {
  166. this.text = text;
  167. this.value = value;
  168. this.dataTime = dataTime;
  169. }
  170. }
  171.  
  172. public class ModelEventPortClosed
  173. {
  174. public ModelEventPortClosed()
  175. { }
  176. }
  177.  
  178. public class ModelEventGetDefaultPort
  179. {
  180. public string defaultPort;
  181.  
  182. public ModelEventGetDefaultPort(string defaultPort)
  183. {
  184. this.defaultPort = defaultPort;
  185. }
  186. }
  187.  
  188. public class ModelEventBeginRecord
  189. {
  190. public PointPair currentPoint;
  191. public Int32 currentCount;
  192.  
  193. public ModelEventBeginRecord(PointPair currentPoint, Int32 currentCount)
  194. {
  195. this.currentPoint = currentPoint;
  196. this.currentCount = currentCount;
  197. }
  198. }
  199.  
  200. public class ModelEventTimeRecord
  201. {
  202. public PointPair firstPoint;
  203.  
  204. public ModelEventTimeRecord(PointPair firstPoint)
  205. {
  206. this.firstPoint = firstPoint;
  207. }
  208. }
  209.  
  210. public class ModelEventSaveReport
  211. {
  212. public string ex = null;
  213.  
  214. public ModelEventSaveReport()
  215. {
  216.  
  217. }
  218.  
  219. public ModelEventSaveReport(string ex)
  220. {
  221. this.ex = ex;
  222. }
  223. }
  224.  
  225. public class ModelEventComConnect
  226. {
  227. public bool message;
  228.  
  229. public ModelEventComConnect()
  230. { }
  231.  
  232. public ModelEventComConnect(bool message)
  233. {
  234. this.message = message;
  235. }
  236. }
  237.  
  238. public interface IModelObserver
  239. {
  240. void CreateProjectsObserver(IModel model, CreateProjectsEventArgs e);
  241. void StartMainObserver(IModel model, EventArgs e);
  242. void GetDefaultPortObserver(IModel model, ModelEventGetDefaultPort e);
  243. void ComConnectObserver(IModel model, ModelEventComConnect e);
  244. void SaveReportObserver(IModel model, ModelEventSaveReport e);
  245. void TimeRecordObserver(IModel model, ModelEventTimeRecord e);
  246. void BeginRecordObserver(IModel model, ModelEventBeginRecord e);
  247. void PortClosedObserver(IModel model, ModelEventPortClosed e);
  248. }
  249.  
  250. public interface IModel
  251. {
  252. void CreateProjectsModel(List<string> text);
  253. void StartMainModel();
  254. void GetDefaultPortModel();
  255. void ComConnectModel(string comName, bool portOpen);
  256. void SaveReportModel(ZedGraphControl graph);
  257. void TimeRecord(bool startOrFinish);
  258. void BeginRecordModel();
  259. void FormClosingModel();
  260. void Attach(IModelObserver imo);
  261. }
  262.  
  263. class Model : IModel
  264. {
  265. private event ModelHandlerCreateProjects<Model> createProjectsEvent;
  266. private event ModelHandler<Model> changed;
  267. private event ModelHandlerGetDefaultPort<Model> getDefaultPort;
  268. private event ModelHandlerComConnect<Model> comConnect;
  269. private event ModelHandlerSaveReport<Model> saveReport;
  270. private event ModelHandlerTimeRecord<Model> timeRecord;
  271. private event ModelHandlerBeginRecord<Model> beginRecord;
  272. private event ModelHandlerPortClosed<Model> portClosed;
  273.  
  274. PointPair newPoint;
  275. Int32 pointCount;
  276.  
  277. private SerialPort serial = new SerialPort();
  278. private List<Pack> queue = new List<Pack>();
  279. private List<byte> inPack = new List<byte>();
  280.  
  281. private DateTime timeStart;
  282. private DateTime timeFinish;
  283.  
  284. private bool continueRecord = false;
  285. bool onlyOnePoint = false;
  286. private double maxPressure = 0;
  287.  
  288. public void Attach(IModelObserver imo) // подписка
  289. {
  290. createProjectsEvent += new ModelHandlerCreateProjects<Model>(imo.CreateProjectsObserver);
  291. changed += new ModelHandler<Model>(imo.StartMainObserver);
  292. getDefaultPort += new ModelHandlerGetDefaultPort<Model>(imo.GetDefaultPortObserver);
  293. comConnect += new ModelHandlerComConnect<Model>(imo.ComConnectObserver);
  294. saveReport += new ModelHandlerSaveReport<Model>(imo.SaveReportObserver);
  295. timeRecord += new ModelHandlerTimeRecord<Model>(imo.TimeRecordObserver);
  296. beginRecord += new ModelHandlerBeginRecord<Model>(imo.BeginRecordObserver);
  297. portClosed += new ModelHandlerPortClosed<Model>(imo.PortClosedObserver);
  298. }
  299.  
  300. public void StartMainModel()
  301. {
  302. changed(this, new EventArgs());
  303. }
  304.  
  305. public void GetDefaultPortModel()
  306. {
  307. string defaultPort = null;
  308. string[] portNames = SerialPort.GetPortNames();
  309. string[] directoryFiles = Directory.GetFiles(Directory.GetCurrentDirectory() + "\resources\");
  310. List<string> directoryList = new List<string>();
  311. List<string> readedStrings = new List<string>();
  312. List<string> portList = new List<string>();
  313.  
  314. foreach (var name in portNames)
  315. portList.Add(name);
  316.  
  317. foreach (var files in directoryFiles)
  318. directoryList.Add(files);
  319.  
  320. if (directoryList.Exists(config => config == Directory.GetCurrentDirectory() + "\resources\" + "cfg.ini"))
  321. {
  322. StreamReader savedCatalog = new StreamReader(Directory.GetCurrentDirectory() + "\resources\" + "cfg.ini", Encoding.UTF8);
  323. while (savedCatalog.EndOfStream == false)
  324. {
  325. readedStrings.Add(savedCatalog.ReadLine());
  326. }
  327.  
  328. if (readedStrings.Count > 1)
  329. {
  330. if (portList.Exists(name => name == readedStrings[1]))
  331. {
  332. defaultPort = portList.Find(port => port == readedStrings[1]);
  333. }
  334. }
  335. }
  336.  
  337. getDefaultPort(this, new ModelEventGetDefaultPort(defaultPort));
  338. }
  339.  
  340. public void ComConnectModel(string comName, bool portOpen)
  341. {
  342. try
  343. {
  344. if (serial.IsOpen == true)
  345. serial.Close();
  346.  
  347. continueRecord = false;
  348.  
  349. serial.PortName = comName;
  350. serial.BaudRate = 9600;
  351. serial.Parity = Parity.None;
  352. serial.DataBits = 8;
  353. serial.StopBits = StopBits.Two;
  354. serial.WriteTimeout = 50;
  355. serial.ReadTimeout = 50;
  356. serial.Open();
  357. }
  358. catch
  359. {
  360. }
  361. finally
  362. {
  363. bool connect = tryConnect();
  364. comConnect(this, new ModelEventComConnect(connect));
  365. if (connect == true)
  366. {
  367. continueRecord = true;
  368. string docPath = Environment.CurrentDirectory;
  369. try
  370. {
  371. using (StreamWriter saveConfigFile = new StreamWriter(docPath + "\resources\" + "cfg.ini", false, Encoding.UTF8))
  372. {
  373. saveConfigFile.WriteLine("[COMPorts]");
  374. saveConfigFile.WriteLine(comName);
  375. saveConfigFile.Close();
  376. }
  377. }
  378. catch { }
  379.  
  380. }
  381. else
  382. continueRecord = false;
  383. }
  384. }
  385.  
  386. private bool tryConnect()
  387. {
  388. try
  389. {
  390. Pack testPack = new Pack();
  391. List<byte> test = new List<byte>();
  392. test.Add(0x00);
  393. test.Add(0x00);
  394. test.Add(0x00);
  395. test.Add(0x01);
  396. testPack.create(0x08, test.ToArray());
  397. serial.Write(testPack.getPackBytes(), 0, testPack.getPackBytes().Length);
  398. for (int i = 0; i < 8; i++)
  399. {
  400. serial.ReadByte();
  401. }
  402. return true;
  403. }
  404. catch
  405. {
  406. return false;
  407. }
  408. }
  409.  
  410. public void SaveReportModel(ZedGraphControl graph)
  411. {
  412. WordReport rep = new WordReport("", "",
  413. timeStart.ToString(),
  414. timeFinish.ToString(),
  415. timeFinish.Subtract(timeStart).ToString(),
  416. maxPressure.ToString());
  417.  
  418. try
  419. {
  420. graph.GetImage().Save(Environment.CurrentDirectory + "\resources\" + "reportPicture.jpg");
  421. //("reportPicture.jpg");
  422. rep.createReport();
  423. rep.closeReport();
  424.  
  425. saveReport(this, new ModelEventSaveReport());
  426. }
  427. catch(Exception ex)
  428. {
  429. if(rep.reportCreated == true)
  430. rep.closeReport();
  431. saveReport(this, new ModelEventSaveReport(ex.ToString()));
  432. }
  433. }
  434.  
  435. public void TimeRecord(bool startOrFinish)
  436. {
  437. //continueRecord = startOrFinish;
  438.  
  439. if (startOrFinish == true)
  440. {
  441. if (!onlyOnePoint)
  442. {
  443. timeStart = DateTime.Now;
  444. timeRecord(this, new ModelEventTimeRecord(new PointPair { X = new XDate(timeStart), Y = 0 }));
  445. onlyOnePoint = true;
  446. }
  447. }
  448. else
  449. {
  450. timeFinish = DateTime.Now;
  451. }
  452. }
  453.  
  454. public void BeginRecordModel()
  455. {
  456. newPoint = new PointPair();
  457. Thread newThread = new Thread(new ThreadStart(IncrementPoints));
  458. newThread.Start();
  459. }
  460.  
  461. private void IncrementPoints()
  462. {
  463. while (continueRecord)
  464. {
  465. if (serial.IsOpen)
  466. {
  467. if (queue.Count > 0)
  468. {
  469. try
  470. {
  471. serial.Write(queue[0].getPackBytes(), 0, queue[0].getPackBytes().Length);
  472. }
  473. catch
  474. {
  475. serial.Close();
  476. continueRecord = false;
  477. portClosed(this, new ModelEventPortClosed());
  478. break;
  479. }
  480. }
  481. else
  482. {
  483. _takeLineState();
  484. }
  485.  
  486. Thread.Sleep(200);
  487.  
  488. inPack.Clear();
  489. byte b = new byte();
  490. while (read_pack(ref b))
  491. {
  492. inPack.Add(b);
  493. }
  494.  
  495. if (inPack.Count > 0)
  496. {
  497. double result = convertToDouble(inPack);
  498. newPoint = new PointPair(new XDate(DateTime.Now), result/10);
  499. pointCount++;
  500.  
  501. if (maxPressure < result)
  502. maxPressure = result;
  503.  
  504. beginRecord(this, new ModelEventBeginRecord(newPoint, pointCount));
  505. }
  506. }
  507. else
  508. {
  509. if (serial.IsOpen)
  510. serial.Close();
  511.  
  512. continueRecord = false;
  513. portClosed(this, new ModelEventPortClosed());
  514. }
  515. }
  516. }
  517.  
  518. private double convertToDouble(List<byte> pk)
  519. {
  520. byte[] a = new byte[2];
  521. a[0] = pk[4];
  522. a[1] = pk[3];
  523. double res = Convert.ToDouble(BitConverter.ToInt16(a,0));
  524. return res;
  525. }
  526.  
  527. public void _takeLineState()
  528. {
  529. read_register(1);
  530. }
  531.  
  532. public void read_register(ushort reg_number)
  533. {
  534. Pack p = new Pack();
  535. byte[] data = BitConverter.GetBytes(reg_number);
  536. List<byte> tmp = new List<byte>();
  537. tmp.Add(data[1]);
  538. tmp.Add(data[0]);
  539. tmp.Add(0x00);
  540. tmp.Add(0x01);
  541. p.create(0x03, tmp.ToArray());
  542. queue.Add(p);
  543. }
  544.  
  545. private bool read_pack(ref byte b)
  546. {
  547. try
  548. {
  549. int val;// = serial.ReadByte();
  550. if (serial.IsOpen)
  551. {
  552. val = serial.ReadByte();
  553. if (val >= 0) b = (byte)val;
  554. return true;
  555. }
  556. else
  557. {
  558. return false;
  559. }
  560. }
  561. catch
  562. {
  563. return false;
  564. }
  565. }
  566.  
  567. public void FormClosingModel()
  568. {
  569. continueRecord = false;
  570. if(serial.IsOpen)
  571. serial.Close();
  572. }
  573.  
  574. SQLiteConnection connection;
  575. //public void SQLite(string[] text)
  576. public void CreateProjectsModel(List<string> text)
  577. {
  578. //conn = new SQLiteConnection("Data Source=" + text[0] + ".db; Version=3;");
  579. //try
  580. //{
  581. // conn.Open();
  582. //}
  583. //catch (SQLiteException ex)
  584. //{
  585. // Console.WriteLine(ex.Message);
  586. //}
  587. //if (conn.State == ConnectionState.Open)
  588. //{
  589.  
  590.  
  591. //}
  592.  
  593. //const string dataBaseName = @"D:GeoFormdataBaseProjects.db";
  594. //connection = new SQLiteConnection(string.Format("Data Source={0};", dataBaseName));
  595. //connection.Open();
  596. //SQLiteCommand command = new SQLiteCommand("CREATE TABLE projects (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nameProduct TEXT NOT NULL, number TEXT NOT NULL, fioResponse INTEGER NOT NULL);", connection);
  597.  
  598. //SQLiteCommand command1 = new SQLiteCommand("INSERT INTO 'projects' ('id', 'nameProduct' , 'number','fioResponse') VALUES (1, 'yty',2,'ryt');", connection);
  599.  
  600. //try
  601. //{
  602. // command.ExecuteNonQuery();
  603. //}
  604. //finally
  605. //{
  606. // connection.Close();
  607. //}
  608. List<string> str = new List<string>();
  609. str.Add("0");
  610. List<double> d1 = new List<double>();
  611. d1.Add(0);
  612. List<double> d2= new List<double>();
  613. d2.Add(0);
  614.  
  615. createProjectsEvent(this, new CreateProjectsEventArgs(str,d1,d2));
  616. }
  617. }
  618. }
Add Comment
Please, Sign In to add comment