問題是控制元件的滾筒為什么在waterstate為stop時風扇無法轉動
控制元件代碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsControlLibrary2
{
public enum WATER_STATE { Stop, In, Out };
public enum ROTATE_STATE { Stop, ForwardRotating, ReversaRotating };
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
DoubleBuffered = true;
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.AllPaintingInWmPaint, true);
}
private double waterLevel;
public double WaterLevel
{
get { return waterLevel; }
set { waterLevel = value; this.Refresh(); }
}
public WATER_STATE waterState;
public WATER_STATE WaterState
{
get { return waterState; }
set { waterState = value; this.Refresh(); }
}
public ROTATE_STATE rotateState;
public ROTATE_STATE RotateState
{
get { return rotateState; }
set { rotateState = value; this.Refresh(); }
}
float angle;
public float Angle
{
get { return angle; }
set { angle = value; }
}
float rotateSpd = 3;
public float RotateSpd
{
get { return rotateSpd; }
set { rotateSpd = value; }
}
private void UserControl1_Paint(object sender, PaintEventArgs e)
{
//畫邊框
Graphics g = e.Graphics;
g.DrawRectangle(new Pen(Color.Black, 3), 0,-3,this.Width-3,this.Height);
//畫變化的水位
int waterHeight = (int)(waterLevel / 100.0 * this.Height);
Rectangle waterRect = new Rectangle(2,this.Height -waterHeight -4 , this.Width - 6, waterHeight);
g.FillRectangle(Brushes.SkyBlue, waterRect);
//畫旋轉的滾筒
Image imgFans = Properties.Resources.fans3;
int xPos = (this.Width - imgFans.Width)/2 ;
int yPos = (this.Height - imgFans.Height) / 2;
Point imgRotateCenterPos = new Point(imgFans.Width/2,imgFans.Height/2); //旋轉中心在圖片坐標(相對于圖片本身)
Rectangle rcShow = new Rectangle(xPos, yPos, imgFans.Width,imgFans.Height); //圖片要繪制的位置區域.
//把 相對于圖片的旋轉中心坐標 轉換為 繪制區域的坐標
PointF centerPos = new Point(imgRotateCenterPos.X+rcShow.Left, imgRotateCenterPos.Y+rcShow.Top);
g.TranslateTransform(centerPos.X,centerPos.Y); //源點移動到旋轉中心
g.RotateTransform(angle); //旋轉
g.TranslateTransform(-centerPos.X, -centerPos.Y);//還原源點
//在某個起點顯示影像
g.DrawImage(imgFans, rcShow.Left,rcShow.Top,rcShow.Width, rcShow.Height);
}
private void timer1_Tick(object sender, EventArgs e)
{
if (WaterState == WATER_STATE.In)
{
if (WaterLevel >= 80.0)
{
waterState = WATER_STATE.Stop;
}
else
WaterLevel += 0.1;
}
if (WaterState == WATER_STATE.Out)
{
if (waterLevel > 0)
{
WaterLevel -= 0.1;
}
else
waterState=WATER_STATE.Stop;
}
if (RotateState == ROTATE_STATE.ForwardRotating && ((WaterState == WATER_STATE.In) || (WaterState == WATER_STATE.Out||(WaterState==WATER_STATE.Stop))))
{
Angle += rotateSpd;
}
if (RotateState == ROTATE_STATE.ReversaRotating && ((WaterState == WATER_STATE.In) || (WaterState == WATER_STATE.Out) || (WaterState == WATER_STATE.Stop)))
{
Angle -= rotateSpd;
}
}
private void UserControl1_Load(object sender, EventArgs e)
{
}
}
}

uj5u.com熱心網友回復:
timer1_Tick 的時間間隔是多少,開啟了沒有?uj5u.com熱心網友回復:
代碼太多,如果你用的是 wf 影像影片 要繪制,否則 gif 不支持,需要借助其他的方式。
推薦你用 wpf 會好一些。
uj5u.com熱心網友回復:
100毫秒,開啟的,不明白為什么風扇必須要在進水或者出水才能轉動
uj5u.com熱心網友回復:
晚上回去幫你看看。uj5u.com熱心網友回復:
把程式發到下載里。uj5u.com熱心網友回復:
改成這樣試試。
private void timer1_Tick(object sender, EventArgs e)
{
if (WaterState == WATER_STATE.In)
{
if (WaterLevel >= 80.0)
{
waterState = WATER_STATE.Stop;
}
else
{
WaterLevel += 0.1;
}
}
if (WaterState == WATER_STATE.Out)
{
if (waterLevel > 0)
{
WaterLevel -= 0.1;
}
else
{
waterState = WATER_STATE.Stop;
}
}
switch (RotateState)
{
case ROTATE_STATE.ForwardRotating:
Angle += rotateSpd;
break;
case ROTATE_STATE.ReversaRotating:
Angle -= rotateSpd;
break;
case ROTATE_STATE.Stop:
break;
}
this.Invalidate();
}
uj5u.com熱心網友回復:
可以轉了,謝謝大佬。。。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/133782.html
標籤:C#
上一篇:來看下,是我受不了了,還是SqlManagements受不了了~~~
下一篇:U8API介面相關問題
