private void treeViewParser_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode selectedNode = e.Node; FieldItem fieldItem = null; if (null != selectedNode) { if (selectedNode.Tag is FieldItem) { fieldItem = (FieldItem)selectedNode.Tag; } } int binarySelectStart = 0; int binarySelectLength = 0; if (null != fieldItem) { if (selectedDataStore != fieldItem.GetDataStore()) { richTextBoxHexString.Clear(); //Display the hex string. richTextBoxHexString.Text = fieldItem.GetDataStoreHexString(); //Set it as current selected. selectedDataStore = fieldItem.GetDataStore(); } //Select the bytes for this field. Int64 offsetStart = fieldItem.Offset / 8; Int64 offsetEnd = (fieldItem.Offset + fieldItem.Length) / 8; //Block start and block end. Int64 blockStart = fieldItem.Offset / 64; //To calculate the count of Environment.NewLine. Int64 blockEnd = (fieldItem.Offset + fieldItem.Length) / 64; //To calculate the count of Environment.NewLine. if (0 != (fieldItem.Offset + fieldItem.Length) % 8) { offsetEnd++; } if (0 == ((fieldItem.Offset + fieldItem.Length) % 64)) { blockEnd--; } richTextBoxHexString.Select((int)(offsetStart * 3 + blockStart), (int)((offsetEnd - offsetStart) * 3 + (blockEnd - blockStart))); richTextBoxHexString.SelectionColor = Color.Red; //richTextBoxHexString.ScrollToCaret(); //To show the detail field property as below. /* * Binary :10100010 11000011 00101001 01000001 * Heximal : A2C32941 * Decimal : 2730699073 * Length : 4 byte * Length : 32 bit * Position: 12 byte * Position: 96 bit */ String binaryStr = null; String hexStr = null; String decimalStr = null; //We'll show the fieldValue only when the bit length is less then 64. if ((64 >= fieldItem.Length) && (fieldItem.Type == ItemType.FIELD)) { Int64 bytesValue = 0; byte[] data = selectedDataStore.GetData(); for (Int64 i = offsetStart; i < offsetEnd; i++) { bytesValue = bytesValue << 8; bytesValue = bytesValue | data[i]; } String binary = "Binary :"; binaryStr = binary + Utility.GetValueBinaryString(bytesValue, (offsetEnd - offsetStart) * 8); hexStr = "Heximal :" + Utility.GetValueHexString(fieldItem.Value, fieldItem.Length); decimalStr = "Decimal :" + Utility.GetValueDecimalString(fieldItem.Value, fieldItem.Length); //Select those bits belonged to this field. Int64 spaceCount = (fieldItem.Offset + fieldItem.Length) / 8 - (fieldItem.Offset) / 8; String lengthPositionStr = String.Format("Length :{0}-byte" + Environment.NewLine + "Length :{1}-bit" + Environment.NewLine + "Offset :{2}-byte" + Environment.NewLine + "Offset :{3}-bit", offsetEnd - offsetStart, fieldItem.Length, fieldItem.Offset / 8, fieldItem.Offset); richTextBoxProperty.Text = binaryStr + Environment.NewLine + hexStr + Environment.NewLine + decimalStr + Environment.NewLine + lengthPositionStr + Environment.NewLine; binarySelectStart = (int)(binary.Length + fieldItem.Offset % 8); binarySelectLength = (int)(fieldItem.Length + spaceCount); } else { String lengthPositionStr = String.Format("Length :{0}-byte" + Environment.NewLine + "Length :{1}-bit" + Environment.NewLine + "Offset :{2}-byte" + Environment.NewLine + "Offset :{3}-bit", offsetEnd - offsetStart, fieldItem.Length, fieldItem.Offset / 8, fieldItem.Offset); richTextBoxProperty.Text = binaryStr + Environment.NewLine + hexStr + Environment.NewLine + decimalStr + Environment.NewLine + lengthPositionStr + Environment.NewLine; } //Show the repeat number. String repeatStr = "Repeat :" + selectedDataStore.GetRepeatTimes(); richTextBoxProperty.AppendText(repeatStr + Environment.NewLine); //Show the packet metadata. List <TsPacketMetadata> packetMetadataList = selectedDataStore.GetPacketMetadataList(); richTextBoxProperty.AppendText("Packet Count: " + packetMetadataList.Count + Environment.NewLine); String packetMetadataStr = "(Packet Number,File Offset): "; foreach (TsPacketMetadata packetMetadata in packetMetadataList) { packetMetadataStr += " (" + packetMetadata.PacketNumber + "," + packetMetadata.FileOffset + ")"; } richTextBoxProperty.AppendText(packetMetadataStr + Environment.NewLine); if (binarySelectLength != 0) { //Select the binary bits finally. We can't make the selection and then insert new sectionDetail. It will not work in such case. richTextBoxProperty.Select(binarySelectStart, binarySelectLength); richTextBoxProperty.SelectionColor = Color.Red; //richTextBoxProperty.ScrollToCaret(); } }//null != fieldItem }