public void RefreshVisualZoneLayout() { try { VisualScrollBar.Value = 0; mVisualZone.ZoneSize = VisualPanel.Size; VisualRow.ROW_SIZE = new Size(mVisualZone.ZoneSize.Width, 9); DataMaster.CalculateBlockPerRowBytesAmountAllowed(); mVisualZone.PrepareRowsLayout(); } catch { } }
public void RefreshVisualZoneData() { try { VisualPanel.Refresh(); if (!DataZoneKeepEmpty) { Graphics g = VisualPanel.CreateGraphics(); int[] bytes_indexes = DataMaster.GetBytesStartEndIndexes(mVisualZone.StartRowNumber, mVisualZone.StartRowNumber + mVisualZone.VisualRowsAmount - 1); mVisualZone.DrawVisualZone(ref g, mDataMaster.PickOutVisualBytes(bytes_indexes)); } ReDrawBlockAddress(); RefreshScrollBarValues(); DataZoneKeepEmpty = false; } catch { } }
/// <summary> /// 将输入的数据从输入的行号的起始位置开始逐个写入数据 /// 写入方式为:1. 当相对索引值小于当前行的容量时,采用覆盖的方式; /// 2. 当相对于索引值大于或等于当前行的容量时,采用嵌入的方式。 /// </summary> /// <param name="inBytes"></param> /// <param name="inRowNumber"></param> private void RefreshBytesIntoBaseEditData(byte[] inBytes, int inRowNumber) { try { int row_capacity = mVisualZone.GetCurrentRowBytesAllowed(inRowNumber); int start_index = DataMaster.GetRowStartByteIndex(inRowNumber); for (int i = 0; i < inBytes.Length; i++) { if (i < row_capacity) { /* * if (inBytes[i] == DataMaster.DEFAULT_NULL_BYTE_ANOTHER_BYTE) * { * if (i < mRawEditTextBoxBytes.Length && mRawEditTextBoxBytes[i] == 0x00) * continue; * } * */ if (i + start_index < mDataMaster.EditeBytesLength) { mDataMaster.ReplaceByte(inBytes[i], start_index + i); } else { mDataMaster.AddByte(inBytes[i]); } } else { mDataMaster.InsertByte(inBytes[i], start_index + i); } } if (inBytes.Length > row_capacity && selectedIndex >= EditeTextBox.Text.Length - 2) { switch (mVisualZone.CurrentDataFormat) { case VisualZone.DataFormat.HEX: SelectedRowNumber++; if (SelectedRowNumber >= (mVisualZone.StartRowNumber + mVisualZone.VisualRowsAmount - 1)) { VisualScrollBar.Value += (SelectedRowNumber - mVisualZone.StartRowNumber - mVisualZone.VisualRowsAmount + 1); } RefreshEditTextBoxLocation(SelectedRowNumber); selectedIndex = 2; break; case VisualZone.DataFormat.ASCII: if (selectedIndex >= EditeTextBox.Text.Length) { SelectedRowNumber++; if (SelectedRowNumber >= (mVisualZone.StartRowNumber + mVisualZone.VisualRowsAmount - 1)) { VisualScrollBar.Value += (SelectedRowNumber - mVisualZone.StartRowNumber - mVisualZone.VisualRowsAmount + 1); } selectedIndex = 1; RefreshEditTextBoxLocation(SelectedRowNumber); } break; case VisualZone.DataFormat.DEC: //2017/07/20 十进制 SelectedRowNumber++; if (SelectedRowNumber >= (mVisualZone.StartRowNumber + mVisualZone.VisualRowsAmount - 1)) { VisualScrollBar.Value += (SelectedRowNumber - mVisualZone.StartRowNumber - mVisualZone.VisualRowsAmount + 1); } RefreshEditTextBoxLocation(SelectedRowNumber); selectedIndex = 3; break; } } else if (inBytes.Length < row_capacity) { int difference = row_capacity - inBytes.Length; for (int i = 0; i < difference; i++) { if ((start_index + inBytes.Length) < mDataMaster.EditeBytesLength) { mDataMaster.RemoveByte(start_index + inBytes.Length); } } } } catch { } }
private void getBaseDataForSelectedRow(int inRowNumber) { try { IsInitializeEditText = true; int[] indexes = DataMaster.GetBytesStartEndIndexes(inRowNumber, inRowNumber); VisualByte[] bytes = mDataMaster.PickOutVisualBytes(indexes); byte[] datas = new byte[bytes.Length]; LastEditBytesAmount = datas.Length; bool isContain87 = false; for (int i = 0; i < bytes.Length; i++) { datas[i] = bytes[i].ByteValue; if (datas[i] == DataMaster.DEFAULT_NULL_BYTE_ANOTHER_BYTE) { isContain87 = true; } } mRawEditTextBoxBytes = datas; switch (mVisualZone.CurrentDataFormat) { case VisualZone.DataFormat.ASCII: string text = ConvertBytesToString(datas); if (!isContain87) { if (EditeTextBox.Text != text) { EditeTextBox.Text = text; } else { IsInitializeEditText = false; } EditeTextBox.SelectionStart = selectedIndex; } else { EditeTextBox.Visible = false; RefreshVisualZoneData(); mWarningForm.Visible = true; } break; case VisualZone.DataFormat.HEX: text = ""; for (int i = 0; i < datas.Length; i++) { byte[] oneByte = new byte[1] { datas[i] }; if (i != datas.Length - 1) { text += BitConverter.ToString(oneByte) + " "; } else { text += BitConverter.ToString(oneByte); } } if (EditeTextBox.Text != text) { EditeTextBox.Text = text; } else { EditeTextBox.Text = text + " "; } break; case VisualZone.DataFormat.DEC: text = ""; for (int i = 0; i < datas.Length; i++) { if (i != datas.Length - 1) { text += datas[i].ToString("d3") + " "; } else { text += datas[i].ToString("d3"); } } if (EditeTextBox.Text != text) { EditeTextBox.Text = text; } else { EditeTextBox.Text = text + " "; } break; } } catch { } }