我这里写的是一个类似金山影霸2002左边的的一个旋转控件。现在我吧全部的代码帖出来,编译的时候没有问题,但调用此控件的时候出现我说的问题。求助!using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms;
namespace WheelControl { /// <summary> /// WheelCtrl 的摘要说明。 /// </summary> /// public class WheelEventHandlerArgs : EventArgs { private int nX; private int nY;
public WheelEventHandlerArgs(int x, int y) { this.nX = x; this.nY = y ; } public int X { get { return nX; } } public int Y { get { return nY; } }
}
public class WheelCtrl : System.Windows.Forms.UserControl { /// <summary> /// 必需的设计器变量。 /// </summary> //private System.ComponentModel.Container components = null;
public enum Orientation {XAxe, YAxe}; public delegate void WheelEventHandler(object sender, WheelEventHandlerArgs e); public event WheelEventHandler WheelDrag; private System.ComponentModel.IContainer components; private Image aImage; private double dSensitivity; private double dMin; private double dMax; private double dValue; private bool bLoop; private Orientation wheelAxe; private int nPos; private int lastX; private int lastY; private bool bCaptured;
public double sensitivity { get { return dSensitivity; } set { dSensitivity = Math.Abs(value); } } public double Min { get { return dMin; } set { dMin = value; } } public double Max { get { return dMax; } set { dMax = value; } } public double Value { get { return dValue; } set { if(value < dMin) dValue = dMin; else if (value > dMax) dValue = dMax; else dValue = value; } } public bool Loop { get { return bLoop; } set { bLoop = value; } } public Orientation WheelAxe { get { return WheelAxe; } set { WheelAxe = value; RotateComponent(); } }
public WheelCtrl() { // 该调用是 Windows.Forms 窗体设计器所必需的。 InitializeComponent();
if(wheelAxe == Orientation.YAxe) { aImage.RotateFlip(RotateFlipType.Rotate90FlipX); this.Size = new Size(8,aImage.Height); } else { this.Size = new Size(aImage.Width, 8); }
this.Invalidate(); }
} }
to w_shd(酸辣粉) 我已经帖出全部的空间代码,现在可以编译通过了,但是调用这个控件才会出现错误提示抛出显示null不是Stream的有效值,异常为“未将对象引用设置到对象的实例”。麻烦再帮忙测试一下
to: yinwu2003(鹦鹉) 我把所有的代码拷贝到一个class1.cs文件中,调试不通过呀!!!程序“E:\wshd\Visual Studio Projects\WheelControl\obj\Debug\WheelControl.exe”未定义入口点不知道怎么回事???? 主函数在什么地方???
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemDrawingBitmapClassctorTopic.htmBitmap的构造函数中有这样的
从指定的文件初始化 Bitmap 类的新实例。
public Bitmap(string);我对你的程序作了些改动,并在窗体上加了个picturnBox
关键代码如下:
string bmpName = @"c:\wheelh.bmp";
....
aImage = new Bitmap(bmpName);
pictureBox1.Image = aImage;
....这样就可以成功打开bmp;
我也挺关心这个问题:怎么用流来初始化一个bitMap!!!!
只能帮你up了!!!!
private void button1_Click(object sender, System.EventArgs e)
{
OleDbConnection myConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Environment.CurrentDirectory+"\\db1.mdb");
myConn.Open();
OleDbDataAdapter thisAdapter= new OleDbDataAdapter("SELECT * FROM mypict",myConn);
OleDbCommandBuilder thisBuilder=new OleDbCommandBuilder(thisAdapter);
DataSet thisDataSet=new DataSet();
thisAdapter.Fill(thisDataSet,"mypict");
DataRow thisRow=thisDataSet.Tables["mypict"].NewRow();
thisRow["id"]=1;
//保存图片
if(pictureBox1.Image !=null)
{
//新建一个内存流
MemoryStream ms = new MemoryStream ();
//把图片内容存到内存流中去
pictureBox1.Image.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp );
//把图片内容存到文件流中去
FileStream fs=new FileStream(Application.StartupPath+"\\ok.bmp",FileMode.Create);
pictureBox1.Image.Save(fs,System.Drawing.Imaging.ImageFormat.Bmp );
//把内存流中的内容按字节读入数组
byte[] myData = new Byte[ms.Length ];
ms.Position = 0;
ms.Read (myData,0,Convert.ToInt32(ms.Length ));
thisRow["photo"] = myData;
ms.Close();
}
thisDataSet.Tables["mypict"].Rows.Add(thisRow);
thisAdapter.Update(thisDataSet,"mypict");
myConn.Close();
} private void button2_Click(object sender, System.EventArgs e)
{
OleDbConnection myConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Environment.CurrentDirectory+"\\db1.mdb");
myConn.Open();
OleDbDataAdapter thisAdapter= new OleDbDataAdapter("SELECT * FROM mypict",myConn);
OleDbCommandBuilder thisBuilder=new OleDbCommandBuilder(thisAdapter);
DataSet thisDataSet=new DataSet();
thisAdapter.Fill(thisDataSet,"mypict");
//方法一通过文件流
// byte[] data =(byte[])thisDataSet.Tables["mypict"].Rows[0]["photo"];
// FileStream myfilestream=new FileStream(Application.StartupPath+"\\monkey.bmp",FileMode.Create);
// myfilestream.Write(data,0,data.Length);
// myfilestream.Close();
// pictureBox2.Image=new Bitmap(Application.StartupPath+"\\monkey.bmp");
//方法二通过内存流
byte[] data =(byte[])thisDataSet.Tables["mypict"].Rows[0]["photo"];
MemoryStream ms = new MemoryStream();
ms.Write(data,0,data.Length);
pictureBox2.Image=new Bitmap(ms);
ms.Close();
myConn.Close();
}
欢迎您使用Microsoft技术,分享知识,共同进步!
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace WheelControl
{
/// <summary>
/// WheelCtrl 的摘要说明。
/// </summary>
///
public class WheelEventHandlerArgs : EventArgs
{
private int nX;
private int nY;
public WheelEventHandlerArgs(int x, int y)
{
this.nX = x;
this.nY = y ;
}
public int X
{
get
{
return nX;
}
}
public int Y
{
get
{
return nY;
}
}
}
public class WheelCtrl : System.Windows.Forms.UserControl
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
//private System.ComponentModel.Container components = null;
public enum Orientation {XAxe, YAxe};
public delegate void WheelEventHandler(object sender, WheelEventHandlerArgs e);
public event WheelEventHandler WheelDrag;
private System.ComponentModel.IContainer components;
private Image aImage;
private double dSensitivity;
private double dMin;
private double dMax;
private double dValue;
private bool bLoop;
private Orientation wheelAxe;
private int nPos;
private int lastX;
private int lastY;
private bool bCaptured;
public double sensitivity
{
get
{
return dSensitivity;
}
set
{
dSensitivity = Math.Abs(value);
}
}
public double Min
{
get
{
return dMin;
}
set
{
dMin = value;
}
}
public double Max
{
get
{
return dMax;
}
set
{
dMax = value;
}
}
public double Value
{
get
{
return dValue;
}
set
{
if(value < dMin) dValue = dMin;
else if (value > dMax) dValue = dMax;
else dValue = value;
}
}
public bool Loop
{
get
{
return bLoop;
}
set
{
bLoop = value;
}
}
public Orientation WheelAxe
{
get
{
return WheelAxe;
}
set
{
WheelAxe = value;
RotateComponent();
}
}
public WheelCtrl()
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();
bCaptured = false;
dSensitivity = 1.0;
dMin = 0.0;
dMax = 1.0;
dValue = (dMin + dMax) / 2.0;
bLoop = false;
wheelAxe = Orientation.XAxe;
nPos = 4;
lastX = lastY = 0;
RotateComponent();
// TODO: 在 InitializeComponent 调用后添加任何初始化
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}
#region Component Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
//
// WheelCtrl
//
this.Name = "WheelCtrl";
this.Size = new System.Drawing.Size(56, 8);
}
#endregion
protected override void OnPaint(PaintEventArgs e)
{
Graphics grfx = e.Graphics;
Rectangle destRect;
Rectangle srcRect;
if(wheelAxe ==Orientation.YAxe)
{
destRect = new Rectangle(0,0,8,aImage.Height);
srcRect = new Rectangle(nPos*(8-1),0,8,aImage.Height);
}
else
{
destRect = new Rectangle(0,0,aImage.Width,8);
srcRect = new Rectangle(0,nPos*(8-1),aImage.Width,8);
}
grfx.DrawImage(aImage,destRect,srcRect,GraphicsUnit.Pixel);
}
protected override void OnResize(EventArgs e)
{
if(this.DesignMode)
{
if(wheelAxe == Orientation.YAxe)
{
this.Size = new Size(8,aImage.Height);
}
else
{
this.Size = new Size(aImage.Width,8);
}
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
bCaptured = true;
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
if(bCaptured && (e.Button & MouseButtons.Left) != 0)
{
bCaptured = false;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
if(bCaptured)
{
int delta;
if(wheelAxe == Orientation.YAxe)
{
delta = e.Y - lastY;
}
else
{
delta = e.X - lastX;
}
DragWheel(delta);
this.Invalidate();
WheelEventHandlerArgs eWheel = new WheelEventHandlerArgs(e.X, e.Y);
if(WheelDrag != null)
{
WheelDrag(this,eWheel);
}
lastX = e.X;
lastY = e.Y;
}
}
private void DragWheel(int dx)
{
double ddx = (dx != 0) ? Math.Abs(dx) : 1.0;
double xx = dx / ddx * Math.Log(Math.Abs(dx) + 2.0);
nPos = (int)((xx != 0 && (nPos+xx <= 0 || nPos+xx >=8)) ? 4 : nPos + xx);
ddx = dValue + xx + ((xx = xx/ddx) * dSensitivity);
if(bLoop)
{
if(ddx > dMax)
{
dValue = (dMin -dMax) + ddx;
}
else if (ddx < dMin)
{
dValue = -(dMin - dMax) + ddx;
}
else
{
dValue = ddx;
}
}
else
{
dValue = Math.Max (Math.Min(ddx,dMax),dMin);
}
}
private void RotateComponent()
{
//aImage = new Bitmap(GetType(),"WheelControl.wheelh.bmp"); //--------------------------------------------------------
string bmpName = "wheelh.bmp";
System.IO.Stream strm = null; try
{
strm = this.GetType().Assembly.GetManifestResourceStream(bmpName);
aImage = new Bitmap(strm);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
if(strm != null)
strm.Close();
}
//--------------------------------------------------------
if(wheelAxe == Orientation.YAxe)
{
aImage.RotateFlip(RotateFlipType.Rotate90FlipX);
this.Size = new Size(8,aImage.Height);
}
else
{
this.Size = new Size(aImage.Width, 8);
}
this.Invalidate();
}
}
}
主函数在什么地方???