public void WriteXml(XmlTextWriter xw) { //背景を描き出す writeXmlBackground(xw); for (int i = 0; i < m_controlList.Count; i++) //先頭(一番後ろにあるモノ)から順番に { ScreenControl sc = m_controlList[i]; sc.WriteXml(xw); } }
/// <summary> /// スクリーンコントロールを新しく作成する /// </summary> /// <param name="param">パラメーター</param> /// <returns>コントロール</returns> private ScreenControl createScreenControl(BaseType param) { Point controlPos = m_bgPanel.PointToClient(Cursor.Position); param.Location = controlPos; ScreenControl control = new ScreenControl(m_bgPanel); control.Param = param; control.Image = global::kkde.Properties.Resources.ImgViewBG; control.Location = param.Location; control.Size = control.Image.Size; return(control); }
/// <summary> /// 指定した位置にあるコントロールを取得する /// </summary> /// <param name="p"></param> /// <returns></returns> private ScreenControl getControlFormPos(Point p) { //一番上(最後に追加したモノ)が先に見つかるように後ろから検索を行う for (int i = m_controlList.Count - 1; i >= 0; i--) { ScreenControl sc = m_controlList[i]; Rectangle rec = new Rectangle(sc.Location, sc.Size); if (rec.Contains(p)) { return(sc); } } return(null); }
/// <summary> /// ドロップしたとき /// </summary> private void bgPanel_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(string))) { string classText = (string)e.Data.GetData(typeof(string)); if (classText.StartsWith("kkde") == false) { //コントロールクラスではないので何もしない return; } Debug.WriteLine("drop classText=" + classText); Type type = Type.GetType(classText); BaseType instance = (BaseType)Activator.CreateInstance(type); ScreenControl control = createScreenControl(instance); m_bgPanel.AddControl(control); } }
/// <summary> /// コントロールにフォーカスを設定する /// </summary> /// <param name="control">フォーカスを設定するコントロール</param> private void setForcusToControl(ScreenControl control) { foreach (ScreenControl sc in m_controlList) { //全コントロールをフォーカス無しにする sc.IsFocus = false; } if (control != null) { Debug.WriteLine("set focus!"); m_activeControl = (ScreenControl)control; m_activeControl.IsFocus = true; } else { m_activeControl = null; GlobalStatus.FormManager.ScreenProperty.SetProperty(this); } }
/// <summary> /// マウスボタンを押したとき /// </summary> private void ScreenPanel_MouseDown(object sender, MouseEventArgs e) { Debug.WriteLine("ScreenPanel_MouseDown"); if (e.Button == MouseButtons.Left) { //ボタンを押した位置のノードを選択状態にする ScreenControl sc = getControlFormPos(e.Location); if (sc == null) { m_moveControlPoint = Point.Empty; } else { m_moveControlPoint = new Point(e.Location.X - sc.Location.X, e.Location.Y - sc.Location.Y); } setForcusToControl(sc); } else { m_moveControlPoint = Point.Empty; } }
/// <summary> /// コントロールを削除する /// </summary> /// <param name="control"></param> public void RemoveControl(ScreenControl control) { m_controlList.Remove(control); }
/// <summary> /// コントロールを追加する /// </summary> /// <param name="control"></param> public void AddControl(ScreenControl control) { m_controlList.Add(control); setForcusToControl(control); this.Invalidate(); }