BinaryEditor下载地址:【网通】点击这里来下载吧,带源程序哦。 【电信、网通】点击此处下载源程序
【下载说明】
1、单击上面这个地址,打开下载页面。
2、点普通下载--等待30秒--点“下载”按钮--保存
闲来无事,写了一个用ListView实现编辑二进制文件的程序,并且支持多标签浏览,也算是练习TabControl了.
输入时需要用到数字键盘的键,完成之后按Enter键. 注意,输入的数据的大小只能在0-255之间.
主要源程序:
/*
* Created by SharpDevelop.
* User: PengJun
* Date: 2012-5-9
* Time: 12:47
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace BinaryEditor
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
private ListViewItem.ListViewSubItem lvsi=null;
private TextBox editTextBox=null;
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
toolStripStatusLabel1.Text="";
toolStripStatusLabel2.Text="";
}
void OpenToolStripMenuItemClick(object sender, EventArgs e)
{
OpenFileDialog ofd=new OpenFileDialog();
ofd.Multiselect=true;
if(ofd.ShowDialog()==DialogResult.OK)
{
for(int i=0;i<ofd.FileNames.Length;i++)
{
LoadFile(ofd.FileNames[i]);
}
}
}
void LoadFile(string filePath)
{
TabPage tp=new TabPage();
ListView lv=new ListView();
tp.Text=Path.GetFileName(filePath);
lv.Anchor=AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right;
lv.Location=new Point(0,0);
lv.Size=new Size(tp.Width,tp.Height);
lv.GridLines=true;
lv.View=View.Details;
lv.Name=Path.GetFileNameWithoutExtension(filePath);
lv.MouseUp+=new MouseEventHandler(lv_MouseUp);
lv.FullRowSelect=true;
lv.MultiSelect=false;
tp.Controls.Add(lv);
tabControl1.TabPages.Add(tp);
tabControl1.SelectedTab=tp;
Stopwatch sw=new Stopwatch();
sw.Start();
using(BinaryReader br=new BinaryReader(File.Open(filePath,FileMode.Open)))
{
long length=br.BaseStream.Length;
int col=0;
int row=0;
int no=0;
int rows=(int)Math.Ceiling(length/256.0);
ListViewItem lvi;
ListViewItem.ListViewSubItem lvsi=new ListViewItem.ListViewSubItem();
for(int i=0;i<256;i++)
{
lv.Columns.Add(i.ToString(),40,HorizontalAlignment.Center);
}
for(int i=0;i<rows;i++)
{
lvi=new ListViewItem();
lvi.Text=i.ToString();
lv.Items.Add(lvi);
}
lv.BeginUpdate();
while(no<length)
{
no++;
byte b=br.ReadByte();
lvsi.Text=b.ToString();
lv.Items[row].SubItems.Add(lvsi);
lvsi=new ListViewItem.ListViewSubItem();
col++;
if(col==256)
{
row++;
col=0;
}
}
lv.EndUpdate();
}
sw.Stop();
toolStripStatusLabel1.Text=sw.ElapsedMilliseconds.ToString()+"ms";
}
void lv_MouseUp(object sender, MouseEventArgs e)
{
TabPage currentTabPage=tabControl1.SelectedTab;
string listViewName=currentTabPage.Text.Substring(0,currentTabPage.Text.Length-4);
ListView currentListView=(ListView)currentTabPage.Controls.Find(listViewName,false)[0];
//delete the old text box
if(this.editTextBox!=null)
{
currentListView.Controls.Remove(this.editTextBox);
this.editTextBox=null;
}
ListViewItem lvi=currentListView.GetItemAt(e.X,e.Y);
ListViewItem.ListViewSubItem lvsi=lvi.GetSubItemAt(e.X,e.Y);
int nColIndex=lvi.SubItems.IndexOf(lvsi);
int nRowIndex=currentListView.SelectedIndices[0];
toolStripStatusLabel2.Text="("+nRowIndex.ToString()+","+nColIndex.ToString()+")";
TextBox editTextBox=new TextBox();
editTextBox.Text=lvsi.Text;
editTextBox.Location=new Point(lvsi.Bounds.Left,lvsi.Bounds.Top);
editTextBox.Size=new Size(lvsi.Bounds.Width,lvsi.Bounds.Height);
editTextBox.Visible=true;
editTextBox.KeyUp+=new KeyEventHandler(editTextBox_KeyUp);
currentListView.Controls.Add(editTextBox);
this.lvsi=lvsi;
this.editTextBox=editTextBox;
editTextBox.Focus();
editTextBox.Select(0,editTextBox.Text.Length);
}
void editTextBox_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode==Keys.Enter)
{
TabPage currentTabPage=tabControl1.SelectedTab;
string listViewName=currentTabPage.Text.Substring(0,currentTabPage.Text.Length-4);
ListView currentListView=(ListView)currentTabPage.Controls.Find(listViewName,false)[0];
try
{
byte b=byte.Parse(this.editTextBox.Text);
this.lvsi.Text=b.ToString();
currentListView.Controls.Remove(this.editTextBox);
this.editTextBox=null;
}
catch(Exception ex)
{
currentListView.Controls.Remove(this.editTextBox);
this.editTextBox=null;
MessageBox.Show(ex.Message,"Exception");
}
return;
}
if(!(e.KeyCode>= Keys.NumPad0 && e.KeyCode<=Keys.NumPad9))
{
MessageBox.Show("Must use the numeric pad 0~9.","Info");
}
}
void CloseCurrentTabToolStripMenuItemClick(object sender, EventArgs e)
{
int selectIndex=tabControl1.SelectedIndex;
tabControl1.TabPages.Remove(tabControl1.SelectedTab);
tabControl1.SelectedIndex=selectIndex-1;
GC.Collect();
}
void ExitToolStripMenuItemClick(object sender, EventArgs e)
{
Close();
}
void SaveToolStripMenuItemClick(object sender, EventArgs e)
{
SaveFileDialog sfd=new SaveFileDialog();
if(sfd.ShowDialog()==DialogResult.OK)
{
using(BinaryWriter bw=new BinaryWriter(File.OpenWrite(sfd.FileName)))
{
TabPage currentTabPage=tabControl1.SelectedTab;
string listViewName=currentTabPage.Text.Substring(0,currentTabPage.Text.Length-4);
ListView currentListView=(ListView)currentTabPage.Controls.Find(listViewName,false)[0];
for(int i=0;i<currentListView.Items.Count;i++)
{
for(int j=1;j<currentListView.Items[i].SubItems.Count;j++)
{
string text=currentListView.Items[i].SubItems[j].Text;
byte b=Convert.ToByte(text);
bw.Write(b);
}
}
}
MessageBox.Show("Save Completely!","Info.");
}
}
}
}
【更多阅读】