Click here to Skip to main content
6,630,586 members and growing! (19,471 online)
Email Password   helpLost your password?
Desktop Development » Miscellaneous » General     Intermediate

C# Rect Tracker

By nashcontrol

C# Rect Tracker (like CRectTracker on C++).
C#, Windows, .NET 1.0, GDI+, Dev
Posted:9 Nov 2004
Updated:16 Nov 2004
Views:76,583
Bookmarked:41 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
23 votes for this article.
Popularity: 4.85 Rating: 3.56 out of 5
3 votes, 13.0%
1
2 votes, 8.7%
2
1 vote, 4.3%
3
4 votes, 17.4%
4
13 votes, 56.5%
5

Sample image

Introduction

Ever tried to find that object that allows Visual studio to move and resize controls? Well, I didn't find it in C# but in C++. Well, here it is in C# :)

Background

The project I was working on required me to create forms in run-time, so I needed something to edit controls - RectTracker.

In C++ there is an object called CRectTracker, but in C# there isn't, so I tried to clone it, it doesn't do what the Visual Studio Tracker does, but it does the job on resizing and moving controls on a form.

Methodology

It's made of a UserControl because doing it using the form graphics object creates ordering problems (a control is "above" the tracker), so making it a control itself, allows me to play with Z-Order and set the control to front.

I used Region Transparenting to create a place for the Control I want to move/resize.

Using The Code

    
SomeControl.BringToFront();
SomeControl.Capture = false;
if(this.Controls.Contains(CSharpTracker))
  this.Controls.Remove(CSharpTracker);
CSharpTracker = new RectTracker(SomeControl);

this.Controls.Add(CSharpTracker);
CSharpTracker.BringToFront();
CSharpTracker.Draw();
    

Control Moving

public void Mouse_Move(object sender,System.Windows.Forms.MouseEventArgs e)
    {
//minimum size for the control is 8x8

if (currentControl.Height < 8)
{
  currentControl.Height = 8;
  return;
}
else if (currentControl.Width < 8)
{
  currentControl.Width = 8;
  return;
}
    
switch(this.CurrBorder)
{
  case RESIZE_BORDER.RB_TOP:
    currentControl.Height = currentControl.Height - e.Y + prevLeftClick.Y;
    if (currentControl.Height > 8)
    currentControl.Top = currentControl.Top + e.Y - prevLeftClick.Y;    
    break;
  case RESIZE_BORDER.RB_TOPLEFT:
    currentControl.Height = currentControl.Height - e.Y + prevLeftClick.Y;
    if (currentControl.Height > 8)
    currentControl.Top =currentControl.Top + e.Y - prevLeftClick.Y;
    currentControl.Width = currentControl.Width - e.X + prevLeftClick.X;
    if (currentControl.Width > 8)
    currentControl.Left =currentControl.Left + e.X - prevLeftClick.X;
    break;
  case RESIZE_BORDER.RB_TOPRIGHT:
    currentControl.Height = currentControl.Height - e.Y + prevLeftClick.Y;
    if (currentControl.Height > 8)
    currentControl.Top = currentControl.Top + e.Y - prevLeftClick.Y;
    currentControl.Width = currentControl.Width + e.X - prevLeftClick.X;
    break;
  case RESIZE_BORDER.RB_RIGHT:
    currentControl.Width = currentControl.Width + e.X - prevLeftClick.X;
    break;
  case RESIZE_BORDER.RB_BOTTOM:
    currentControl.Height = currentControl.Height + e.Y - prevLeftClick.Y;
    break;
  case RESIZE_BORDER.RB_BOTTOMLEFT:
    currentControl.Height = currentControl.Height + e.Y - prevLeftClick.Y;
    currentControl.Width = currentControl.Width - e.X + prevLeftClick.X;
    if (currentControl.Width > 8)
currentControl.Left = currentControl.Left + e.X - prevLeftClick.X;
    break;
  case RESIZE_BORDER.RB_BOTTOMRIGHT:
    currentControl.Height = currentControl.Height + e.Y - prevLeftClick.Y;
    currentControl.Width = currentControl.Width + e.X - prevLeftClick.X;
    break;
  case RESIZE_BORDER.RB_LEFT:
    currentControl.Width = currentControl.Width - e.X + prevLeftClick.X;
    if (currentControl.Width > 8)
    currentControl.Left = currentControl.Left + e.X - prevLeftClick.X;
    break;
  case RESIZE_BORDER.RB_NONE:
    currentControl.Location = new Point(currentControl.Location.X + e.X - 
    prevLeftClick.X, currentControl.Location.Y + e.Y - prevLeftClick.Y);
    break;
  
}

}
    

Conclusion

This SharpRectTracker control is a clone of the CRectTracker, and it allows a user to Move and Resize form objects (control) in run-time, this control can be further enhanced to allow multiple object move/resize (using selection) and to do selectable Resize (for an object that only the width can be changed).

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

nashcontrol


Member

Occupation: Web Developer
Company: Indigo - Smart House Solutions
Location: Israel Israel

Other popular Miscellaneous articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 26 (Total in Forum: 26) (Refresh)FirstPrevNext
GeneralMore Functionality For Rect Tracker PinmemberDerek Hart14:41 12 Jan '08  
QuestionHow to make a perspective PinmemberEl Tucu16:52 17 Sep '06  
GeneralScrollbars Pinmemberzulfi_k6:19 10 Mar '06  
GeneralRe: Scrollbars Pinmembernashcontrol6:59 11 Mar '06  
GeneralRe: Scrollbars Pinmemberzulfi_k5:23 13 Mar '06  
GeneralRe: Scrollbars [modified] PinmemberPugwash20042:54 12 Jun '06  
GeneralVery Helpful Pinmemberkmerrell14:53 25 Feb '06  
Generalthank you! Pinmembernashcontrol11:19 9 Mar '06  
GeneralWorking with forms PinmemberrleonardiBR9:02 29 Apr '05  
GeneralI doubt it can do it Pinmembernashcontrol5:03 6 May '05  
GeneralSelect several controls PinmemberAlexander_Vikhorev8:07 7 Mar '05  
GeneralRe: Select several controls PinmemberAlexander_Vikhorev8:09 7 Mar '05  
GeneralRe: Select several controls Pinmembernashcontrol1:04 11 Mar '05  
GeneralListBox Pinmembervillander9:00 22 Dec '04  
GeneralRe: ListBox Pinmembernashcontrol1:57 11 Mar '05  
GeneralRectTracker improvements Pinmemberklaus3b3:41 7 Dec '04  
Generalgreat!, thanks Pinmembernashcontrol23:06 10 Mar '05  
GeneralDesigner PinmemberGaston1:20 23 Nov '04  
GeneralRe: Designer PinmemberTesto28ß58:43 15 Oct '06  
GeneralNice Work, But... PinmemberAju.George4:09 10 Nov '04  
GeneralRe: Nice Work, But... Pinmembernashcontrol5:17 10 Nov '04  
Generalabout the link you gave Pinmembernashcontrol5:31 10 Nov '04  
Generaldoh: PinsussAnonymous1:42 10 Nov '04  
GeneralDataGrid PinmemberGary Thom0:32 10 Nov '04  
GeneralYes Pinmembernashcontrol0:59 10 Nov '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 16 Nov 2004
Editor: Nishant Sivakumar
Copyright 2004 by nashcontrol
Everything else Copyright © CodeProject, 1999-2009
Web20 | Advertise on the Code Project