Я немного повозился с этим.То, что я сделал, было
1) поместил невидимую графическую рамку в качестве заполнителя элемента управления в форме с именем ph1
2) настроил элемент управления HexBox в Form_Load ()
private HexBox hexBox;
private void Form1_Load(object sender, EventArgs e)
{
hexBox = new HexBox()
{
Top = ph1.Top,
Width = ph1.Width,
Height = ph1.Height,
Left = ph1.Left,
Visible = true,
UseFixedBytesPerLine = true,
BytesPerLine = 16,
ColumnInfoVisible = true,
LineInfoVisible = true,
StringViewVisible = true,
VScrollBarVisible = true
};
this.Controls.Add(hexBox);
this.Controls.Remove(ph1);
}
3) Загрузить фактический файл в событие DragDrop
var filePath = ((string[])(e.Data.GetData(DataFormats.FileDrop)))[0];
var source = new FileByteProvider(filePath);
hexBox.ByteProvider = source;
hexBox.Refresh();
Пример после перетаскивания файла DOCX на форму:
![enter image description here](https://i.stack.imgur.com/J1yw0.png)
Редактировать: если вы хотите предоставить какой-то самостоятельно сгенерированный массив байтов, это так просто:
byte[] byteArr = {0xaa, 0x3f, 0x4b};
hexBox.ByteProvider = new DynamicByteProvider(byteArr);
Редактировать 2: Сохранитьсодержимое шестнадцатеричного поля: Я уверен, что есть лучший способ сделать это.Сейчас я обнаружил, что нужно просто добавить обработчик в блок определения шестнадцатеричного поля:
hexBox.CopiedHex += HexBox_CopiedHex;
Иметь какую-то кнопку "Сохранить" с таким кодом:
private void button1_Click(object sender, EventArgs e)
{
hexBox.SelectAll();
hexBox.CopyHex();
hexBox.SelectionLength = 0;
}
Итакой обработчик событий:
private void HexBox_CopiedHex(object sender, EventArgs e)
{
var hex = Clipboard.GetText();
var hexHex = hex.Split(' ');
var hexArr = new byte[hexHex.Length];
for (var i = 0; i < hexHex.Length; i++)
{
hexArr[i] = byte.Parse(hexHex[i], NumberStyles.AllowHexSpecifier);
}
File.WriteAllBytes(@"C:\00_Work\test.bin", hexArr);
}