/// <summary> /// Notifies clients about change in the cell /// </summary> /// <param name="aChangeType"> /// Type of change <see cref="CellChangedType"/> /// </param> protected virtual void OnCellChanged(CellChangedType aChangeType) { if (cellChanged != null) { cellChanged(this, new EnumCellChangedEventArgs(aChangeType, this)); } }
/// <summary> /// 修改儲存格。 /// </summary> /// <param name="row">儲存格的列索引。</param> /// <param name="col">儲存格的行索引。</param> /// <returns>若有更動儲存格內容,則傳回 true,否則傳回 false。</returns> internal void EditCell(int row, int col) { /* NOTE * 每當儲存格內容有變動時,需考慮以下情況: * * 1. 修改了明眼字。此情況的變化比較大,例如:把原本的英數字 "123" * 中間的 "2" 改成中文字。碰到這種情況,相鄰的 "3" 的點字也會受 * 到影響,必須重新產生才行。但重新產生整份文件的點字又會造成其 * 他已經修改過的部份得再修改一次,因此,碰到這種英數字改成中文 * 字的情況,程式還是不自動修正相鄰的點字,而由使用者自行以修改 * 點字(接著的第 3 種情況)的功能來修正此問題。 * 2. 只修改點字的注音碼。此種情況可能使新的點字方數增加或減少, * 因此必須重新斷行,並將點字重新添入 Grid。若方數不變,或沒有 * 超過每列最大方數,就不要重新斷行,以節省處理時間。 * 3. 修改點字。這種情況只需比對新舊點字的方數,若有差異,則要重新 * 斷行。 * * 第 1 種情況可能會包含後面兩種情況,第 2 種可能包含第 3 種情況, * 但是不會包含第 1 種情況。同理,第 3 種情況也不會包含第 1 或第 2 * 種情況。 */ if (row < 0 || col < 0) // 防錯:如果不是有效的儲存格位置就直接返回。 { return; } BrailleWord brWord = (BrailleWord)brGrid[row, col].Tag; EditCellForm form = new EditCellForm(); form.Mode = EditCellMode.Edit; form.BrailleWord = brWord; if (form.ShowDialog() == DialogResult.OK) { // 判斷新的跟原本的點字,以得知是屬於哪一種修改情況。 CellChangedType cellChgType = CellChangedType.None; if (!brWord.Text.Equals(form.BrailleWord.Text)) { cellChgType = CellChangedType.Text; } else if (!brWord.PhoneticCode.Equals(form.BrailleWord.PhoneticCode)) { cellChgType = CellChangedType.Phonetic; } else if (!brWord.CellList.Equals(form.BrailleWord.CellList)) { cellChgType = CellChangedType.Braille; } if (cellChgType != CellChangedType.None) { brWord.Copy(form.BrailleWord); OnDataChanged(); GridCellChanged(row, col, brWord, cellChgType); } } }
protected override void OnCellChanged (CellChangedType aChangeType) { base.OnCellChanged (aChangeType); switch (ItemState) { case EnumItemState.Normal: image.MouseOver = false; label.ModifyFg(StateType.Normal); break; case EnumItemState.Preflight: image.MouseOver = true; label.ModifyFg(StateType.Normal); break; case EnumItemState.Selected: image.MouseOver = false; label.ModifyFg(StateType.Normal, label.Style.Foregrounds[(int) StateType.Selected]); break; } label.Visible = (DisplayMode != EnumItemDisplayMode.IconsOnly); image.Visible = (DisplayMode != EnumItemDisplayMode.TextOnly); }
/// <summary> /// 將指定的 BrailleWord 物件的資料填入指定的儲存格。 /// </summary> /// <param name="row">指定之儲存格的列索引。</param> /// <param name="col">指定之儲存格的行索引。</param> /// <param name="brWord">欲填入儲存格的 BrailleWord 物件。</param> private void GridCellChanged(int row, int col, BrailleWord brWord, CellChangedType chgType) { if (chgType == CellChangedType.None) { return; } // 由於每個點字在顯示時佔三列(點字、明眼字、注音碼),因此先推算出點字的列索引。 row = GetBrailleRowIndex(row); // Note: 不可重新轉點字,只重新斷行。 // 判斷新設定的點字方數是否不同於儲存格原有的點字方數,若否,則必須重新斷字。 if (brGrid[row, col].ColumnSpan == brWord.Cells.Count) { UpdateCell(row, col, brWord); } else { ReformatRow(row); } }
protected override void OnCellChanged(CellChangedType aChangeType) { base.OnCellChanged(aChangeType); switch (ItemState) { case EnumItemState.Normal: image.MouseOver = false; label.ModifyFg(StateType.Normal); break; case EnumItemState.Preflight: image.MouseOver = true; label.ModifyFg(StateType.Normal); break; case EnumItemState.Selected: image.MouseOver = false; label.ModifyFg(StateType.Normal, label.Style.Foregrounds[(int)StateType.Selected]); break; } label.Visible = (DisplayMode != EnumItemDisplayMode.IconsOnly); image.Visible = (DisplayMode != EnumItemDisplayMode.TextOnly); }
/// <summary> /// Cell changed event /// </summary> /// <param name="aChangeType"> /// Change type <see cref="CellChangedType"/> /// </param> protected override void OnCellChanged(CellChangedType aChangeType) { base.OnCellChanged(aChangeType); switch (ItemState) { case EnumItemState.Normal: case EnumItemState.Preflight: label.ModifyFg(StateType.Normal); if (BoldWhenSelected == true) { label.Text = Text; } break; case EnumItemState.Selected: label.ModifyFg(StateType.Normal, label.Style.Foregrounds[(int)StateType.Selected]); if (BoldWhenSelected == true) { label.Markup = "<b>" + Text + "</b>"; } break; } label.Visible = (DisplayMode != EnumItemDisplayMode.IconsOnly); }
public EnumCellChangedEventArgs(CellChangedType aChangeType, HComboCell aCell) { cell = aCell; changeType = aChangeType; }