예제 #1
0
		//-------------------------------------------------------------
		// 概要:コンストラクタ
		// 詳細:イベントの設定
		//-------------------------------------------------------------
		public WriteFieldControl()
		{
			InitializeComponent();

			// 選択スレッドのクリックイベント
			selectThreadLabel.MouseDown += (sender, e) =>
			{
				if (e.Button == MouseButtons.Left)
				{
					// 選択スレッド画面を開く
					threadSelectView.TopMost = ParentForm.TopMost;
					threadSelectView.Open();
				}
				else if (e.Button == MouseButtons.Right)
				{
					RightClick(sender, e);
				}
			};

			// 新着レス表示処理
			string newRes = "";
			showNewResWorker.WorkerSupportsCancellation = true; // キャンセル処理を許可
			showNewResWorker.DoWork += (sender, e) =>
			{
				newRes = ReadNewRes();
			};
			showNewResWorker.RunWorkerCompleted += (sender, e) =>
			{
				newResToolTip.SetToolTip(selectThreadLabel, newRes);
			};

			// マウスオーバー時に新着レス表示
			selectThreadLabel.MouseHover += (sender, e) =>
			{
				// 新着レス表示の実行
				if (!showNewResWorker.IsBusy)
				{
					showNewResWorker.RunWorkerAsync();
				}
			};

			// レス書き込み処理
			writeResWorker.WorkerSupportsCancellation = true;
			writeResWorker.DoWork += (sender, e) =>
			{
				string message = writeFieldTextBox.Text;

				WriteResResult result = new WriteResResult();
				result.WriteResult = true;
				result.Message = message;

				// レス書き込み
				try
				{
					Logger.Instance.InfoFormat("レス書き込み [掲示板:{0} スレッド:{1}, 本文:{2}]", operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message);

					operationBbs.Write("", "sage", message);
					Logger.Instance.InfoFormat("レス書き込み:成功 [掲示板:{0} スレッド:{1}, 本文:{2}]", operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message);
				}
				catch (Exception ex)
				{
					result.WriteResult = false;
					result.Exception = ex;
					Logger.Instance.ErrorFormat("レス書き込み:失敗 [エラー内容{0} 掲示板:{1} スレッド:{2}, 本文:{3}]", ex.Message, operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message);
				}
				finally
				{
					e.Result = result;
				}
			};
			// 書き込み完了処理
			writeResWorker.RunWorkerCompleted += (sender, e) =>
			{
				WriteResResult result = (WriteResResult)e.Result;

				// 書き込み欄を有効
				writeFieldTextBox.Enabled = true;
				writeFieldTextBox.WatermarkText = "書き込み内容を入力してください";

				// 書き込み成功
				if (result.WriteResult)
				{
					ToastMessage.Show("レス書き込みが完了しました。");
					writeFieldTextBox.Text = "";
				}
				// 書き込み失敗
				else
				{
					ToastMessage.Show(string.Format("レス書き込みに失敗しました。[{0}]", result.Exception.Message));
					writeFieldTextBox.Text = result.Message;
					Logger.Instance.ErrorFormat("{0}\n\n掲示板:{1}\nスレッド:{2}\n本文:{3}", result.Exception.Message, operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, result.Message);
				}

				// 書き込み欄をフォーカス
				writeFieldTextBox.Focus();
			};

			// 書き込みボタン押下
			writeButton.Click += (sender, e) =>
			{
				// レス書き込み
				WriteRes();
			};

			// スレッド変更イベント
			threadSelectView.ThreadChange += (sender, e) =>
			{
				// スレッド情報の更新
				ThreadSelectEventArgs args = (ThreadSelectEventArgs)e;
				operationBbs = args.OperationBbs;
				UpdateThreadTitle();
			};
			// スレッドタイトルの更新
			operationBbs.ThreadListChange += (sender, e) => UpdateThreadTitle();

			// 高さ自動調節
			writeFieldTextBox_TextChanged(this, new EventArgs());

			// 選択スレッドのレス数の更新
			Timer timer = new Timer();
			timer.Interval = UpdateThreadResCount;
			timer.Tick += (sender, e) =>
			{
				operationBbs.UpdateThreadList();
				UpdateThreadTitle();
			};
			timer.Start();

			// サイズ変更時に高さの自動調節
			SizeChanged += (sender, e) =>
			{
				if (Visible)
				{
					Height = selectThreadLabel.Height + writeFieldTextBox.PreferredSize.Height;
				}
				else
				{
					Height = 0;
				}
			};
		}