油漆事件如何工作?

加入
2014年6月16日
消息
16
编程经验
Beginner
我刚刚经历了很多工作,试图弄清楚为什么我的一些照片箱有他们的福彩12选5走势图方法,而其他照片则没有。我正在寻找Painteventargs的MSDN,似乎并没有很好地解释一下。

所以这就是发生的事情。我有一个填充的tablelautpanel,里面装满了图像。我把Tablelayoutpanel添加到我的形式上,整个东西都画得很好。我还有一个额外的8张照片,但那些并不像幸运的那样。由于它们不需要TLP我刚刚使用PictureBoxes并将所有8个图片框添加到我的表单中,并且只有其中一个是一次被福彩12选5走势图。出于某种原因,只有我被调用的第一个福彩12选5走势图方法。因此,TLP和8个其他图像中的一个被称为福彩12选5走势图方法。

我通过从第一张图像调用其他7张图像的福彩12选5走势图方法来解决这个问题,但这似乎是对我的言话。此解决方案在此特定实例中工作,但我想知道此设置出现问题。据我所知,这是一些逻辑,我不理解,而不是我的编码。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,589
地点
悉尼,澳大利亚
编程经验
10+
如果您希望我们能够确定您的错误,那么它将有助于向我们展示您所做的事。

那个说,如果你正在做的只是在图片框中显示图像,那么油漆事件就会无关紧要。您将图像对象分配给Picturebox的Image属性,也将您调用加载方法或设置ImageLocation属性;任务完成。如果您尝试使用GDI +福彩12选5走势图PictureBox本身,那么您只需处理绘画事件并在事件处理程序中使用E.Graphics来进行图形,例如,通过调用E.Graphics.Drawstring。
 
加入
2014年6月16日
消息
16
编程经验
Beginner
我的问题是我有8个图片盒,只有其中一个是一次推出的福彩12选5走势图方法。


我的代码有点太大,所以我试图尽可能地缩小到受影响的部分。


我最好的猜测是我的代码中的错误并不是那么多错误,而是对福彩12选5走势图事件如何运作的误解。


我有一个类,它从图片箱继承,我正在使用它而不是picturebox。唯一的变化是构造函数


C#:
    using System.Drawing;
    using System.Windows.Forms;


    public class DrawingSurface : PictureBox
    {
        public DrawingSurface(Rectangle bounds) : base() {
            base.Dock = DockStyle.Fill;
            base.SizeMode = PictureBoxSizeMode.Zoom;
            //I set the size and bounds which is probably redundant because 
            //I was trying random things to fix the problem
            base.Size = new Size(bounds.Width, bounds.Height);
            base.Bounds = bounds;
            base.Margin = new Padding(0) ;
            base.BackColor = Color.Transparent;
        }
    }



C#:
    public class MyForm:Form
    {
        public MyForm():base()
        {
            base.FormBorderStyle = FormBorderStyle.Sizable;
            base.MaximizeBox = false;
            base.MinimizeBox = false;
            base.Bounds = Screen.PrimaryScreen.Bounds;
        }


    }

这是我的主班




C#:
   class Program
    {
        static int Main()
        {
            short boardOffsetX, boardOffsetY, trayOffsetX, trayOffsetY;
            MyForm gameImage = null;
            Tray playerTray = null;
            ScrabbleBoard board = null;
            BagOfLetters bag = null;




            AppDomain currentDomain = AppDomain.CurrentDomain;
            currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);//this line of code doesn't work either if any of you can spot anything obvious here.  


            //this is my hacky way of centering the images, wouldn't mind you telling me
            //a better way of doing this either.  
            boardOffsetX = (short)(Screen.PrimaryScreen.Bounds.Width/4);
            boardOffsetY = (short)(Screen.PrimaryScreen.Bounds.Height/8);
            trayOffsetX = (short)(Screen.PrimaryScreen.Bounds.Width / 3.3);
            trayOffsetY = (short)(Screen.PrimaryScreen.Bounds.Height / 24);
            try
            {
                gameImage = new MyForm();
                bag = new BagOfLetters();
                board = new ScrabbleBoard(gameImage, new Point(boardOffsetX, boardOffsetY));
                playerTray = new Tray(bag, trayOffsetX, trayOffsetY, gameImage);
                gameImage.ShowDialog();
            }
            finally
            {
                 //Dispose all
            }
        }
    }

我的图像是如此福彩12选5走势图的。我有一个大型课程,大型图像持有7个较小的类及其图像。我试着从我的大班上初始化一切。


C#:
   public class Tray{
        private Image TrayImage;
        private DrawingSurface TraySurface;
        private short OffsetY = 0;
        private short OffsetX = 0;
        public List<LB> Tray;


        public Tray(Bag bag, short offsetX, short offsetY, MyForm gameImage)
        {
            Letter tmp;


            //paramater validation


            TrayImage = Image.FromFile(PATHOFTRAY);
            //GetBoundsAsRectangle is just getting the image dimensions as a rectangle
            TraySurface = new DrawingSurface(GetBoundsAsRectangle()) ;
            TraySurface.Location = new Point(offsetX, offsetY);


            this.OffsetX = offsetX;
            this.OffsetY = offsetY;


            do
            {
                tmp = bag.PullLetter();
            }
            while (AddLetter(tmp, gameImage));
            //make this image draw
            TraySurface.Paint += new PaintEventHandler(this.Draw);
            gameImage.Controls.Add(TraySurface);
            TraySurface.SendToBack();
        }




        public bool AddLetter(Letter letter, MyForm gameImage) {
            //argument validation
            Count++;
            letter.PutOnTray(Count, OffsetX, OffsetY);
            gameImage.Controls.Add(letter.GetDrawingSurface());
            if (letterCount >= MAXLETTERS)
            {
                return false;
            }
            return true;
        }




        public void Paint(Object sender, PaintEventArgs drawEvent)
        {
            //paramater validation here
            Rectangle rectangleAreaToDrawImage = new Rectangle(OffsetX,
                                                                OffsetY,
                                                                TrayImage.Width,
                                                                TrayImage.Height);
            // Draw image to screen.
            drawEvent.Graphics.DrawImage(TrayImage, rectangleAreaToDrawImage);
        }
    }

C#:
  public class Letter
    {
        private Image LetterImage;
        private DrawingSurface LetterSurface;
        private int PositionOnTray;


        public Letter(char value, String fName) {
            LetterImage = Image.FromFile(fName);
            LetterSurface = new DrawingSurface(GetBoundsAsRectangle());
        }




        public void PutOnTray(short position, short x, short y)
        {
            //validation
            PositionOnTray = position;
            TrayOffsetX = (short)(x + (position*20));
            TrayOffsetY = y;
            IsOnTray = true;
            LetterBlockSurface.Location = new Point(TrayOffsetX, TrayOffsetY);
            LetterBlockSurface.Paint += new PaintEventHandler(this.Draw);
        }
        public void Paint(Object sender, PaintEventArgs drawEvent)
        {
            int x = 0, y = 0;


            //paramater validation here
            x = (TrayOffsetX + (LetterImage.Width * PositionOnTray));
            y = (TrayOffsetY + 6);
            Location = new Rectangle(x,
                                     y,
                                     LetterImage.Width,
                                     LetterImage.Image.Height);
            drawEvent.Graphics.DrawImage(LetterImage, Location);
    }

所以基本上托盘有一个图像,7个字母也有图像。现在,现在在托盘之上福彩12选5走势图的字母,但在他们自己的图片箱上。我添加了一个福彩12选5走势图方法来托盘和字母,并将那些添加到Pictureboxes绘画中。我需要字母来具有单独的图片框,因为稍后我想添加功能,以便在鼠标点击屏幕上播放并拖动它们。


问题是涂料方法没有被调用。只是与psuedocode的理论明智,你怎么样绘画这个?我来自Java / C / C ++背景,图形从来都不是我的焦点点,所以我相信,而不是一个错误,它是如何将这是错误的。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,589
地点
悉尼,澳大利亚
编程经验
10+
如果福彩12选5走势图事件处理程序未执行,则不会提出福彩12选5走势图事件,这意味着控制未被福彩12选5走势图。可以是你处理错误对象的事件吗?
C#:
  public class Letter
    {
        private Image LetterImage;
        private DrawingSurface [B][COLOR="#008000"]LetterSurface[/COLOR][/B];
        private int PositionOnTray;


        public Letter(char value, String fName) {
            LetterImage = Image.FromFile(fName);
            LetterSurface = new DrawingSurface(GetBoundsAsRectangle());
        }




        public void PutOnTray(short position, short x, short y)
        {
            //validation
            PositionOnTray = position;
            TrayOffsetX = (short)(x + (position*20));
            TrayOffsetY = y;
            IsOnTray = true;
            LetterBlockSurface.Location = new Point(TrayOffsetX, TrayOffsetY);
            [B][COLOR="#FF0000"]Letter[U]Block[/U]Surface[/COLOR][/B].Paint += new PaintEventHandler(this.Draw);
        }
这是否应该是字母表,而不是字母BBLOCKSURFFACE你应该处理的油漆活动?除了这两条线之外,我找不到对字母Blocksurface的任何其他引用,所以不确定它实际的实际情况,但是,就像该字母类都有一个类型的digkingSurface的字段,似乎你应该在该对象上福彩12选5走势图。
 
加入
2014年6月16日
消息
16
编程经验
Beginner
对不起,我发布了关于stackoverflow的类似问题,他们没有帮助,所以我刚刚复制并粘贴了代码的联系并增加了一些细节。详细信息遗漏了名称的变化。所有它都应该是字符脸,没有"Block"部分。我并不是故意为答案购物,它只是我现在一直在敲打我的头部2-3天。

无论如何,我想我想解决问题的解决方案。我通过将绘图事件添加到表格涂料的东西而不是图片框来完成它。这似乎是有原因的......这个解决方案似乎现在正在工作,但我打算在图片中添加MouseEvents。我一直在玩这个新的一半小时,我遇到了一个新问题。无论我在屏幕上单击屏幕,触发鼠标事件。这应该发生吗?我可以通过计算自己来解决这个问题,如果MouseClick在图片上方,但我认为这不是一个理想的解决方案。
 
Last edited:
加入
2014年6月16日
消息
16
编程经验
Beginner
没关系,它不是一个解决方案......现在我有同样的问题,只有鼠标事件。只有第一个字母表才会注册鼠标事件。由于我不再福彩12选5走势图PictureBox,但是当我尝试将鼠标事件添加到Picturebox时,我会获得与我福彩12选5走势图时的问题相同。显然问题是,只有其中一个图片箱被插入到表单中。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,589
地点
悉尼,澳大利亚
编程经验
10+
我并不是故意为答案购物,它只是我现在一直在敲打我的头部2-3天。
您不必为在多个地方发布问题而道歉。你在这个网站之外所做的不关心。只要你只在这里发布每个主题,那很好。
 
加入
2014年6月16日
消息
16
编程经验
Beginner
你认为我可以给你发电子邮件你的Visual Studio项目,你可以看看,因为我相信它的愚蠢。刚下午我是一封电子邮件,我可以用来使用,并罚款。我希望在现在的项目内容中谨慎,但是差异化的功能并不是那么,如果我发送它,那么它就不重要。
 
最佳 底部