|
i actually haven't started yet... still trying to plan the control
i have no idea where to start. I don't think the UI will be too much of a problem after ive figured out how to insert / extract the data out of the control...
Any ideas?
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
you.suck = (you.passion != Programming)
|
|
|
|
|
This is something rough I scratched up this morning based on some older code I had used in a similar situation - edited variable and type names to fit for you.
It's a bit long but it should work for the basic data structure!
public struct Employee : IComparable
{
public Employee(string name)
{
m_Name = name;
}
private string m_Name;
public string Name
{
get { return m_Name; }
set { m_Name = value; }
}
public static bool operator ==(Employee e1, Employee e2)
{
return e1.m_Name == e2.m_Name;
}
public static bool operator !=(Employee e1, Employee e2)
{
return e1.m_Name != e2.m_Name;
}
public override bool Equals(object obj)
{
if (obj is Employee)
{
Employee tmp = (Employee)obj;
return m_Name.Equals(tmp.m_Name);
}
return false;
}
public override int GetHashCode()
{
return m_Name.GetHashCode();
}
public override string ToString()
{
return m_Name;
}
public int CompareTo(object obj)
{
if (obj is Employee)
{
Employee tmp = (Employee)obj;
return m_Name.CompareTo(tmp.m_Name);
}
return 1;
}
}
public class EmployeeCollection : List<Employee>
{
public event EventHandler ListChanged;
public new void Add(Employee employee)
{
if (!Contains(employee))
{
base.Add(employee);
OnListChanged();
}
else
throw new ArgumentException("Employee exists", "employee");
}
protected virtual void OnListChanged()
{
if (ListChanged != null)
{
ListChanged(this, EventArgs.Empty);
}
}
}
public struct Time
{
public Time(int hour, int minute)
{
if (hour > 0 && hour <= 23)
m_Hour = hour;
else
throw new ArgumentOutOfRangeException(
"Hour", "Hour must be between 0 and 23");
if (minute > 0 && minute <= 59)
m_Minute = minute;
else
throw new ArgumentOutOfRangeException(
"Minute", "Minute must be between 0 and 59");
}
private int m_Hour;
private int m_Minute;
public int Hour
{
get { return m_Hour; }
set
{
if (value > 0 && value <= 23)
m_Hour = value;
else
throw new ArgumentOutOfRangeException(
"Hour", "Hour must be between 0 and 23");
}
}
public int Minute
{
get { return m_Minute; }
set
{
if (value > 0 && value <= 59)
m_Minute = value;
else
throw new ArgumentOutOfRangeException(
"Minute", "Minute must be between 0 and 59");
}
}
public override string ToString()
{
return m_Hour.ToString().PadLeft(2, '0') +
m_Minute.ToString().PadLeft(2, '0');
}
public DateTime ToDateTime()
{
DateTime rtn = new DateTime();
rtn.AddHours(m_Hour);
rtn.AddMinutes(m_Minute);
return rtn;
}
public static Time FromDateTime(DateTime value)
{
return new Time(value.Hour, value.Minute);
}
}
public struct Shift
{
public Shift(Time start, TimeSpan duration)
{
m_Start = start;
m_Duration = duration;
}
private Time m_Start;
private TimeSpan m_Duration;
public Time Start
{
get { return m_Start; }
set { m_Start = value; }
}
public TimeSpan Duration
{
get { return m_Duration; }
set { m_Duration = value; }
}
public Time End
{
get { return Time.FromDateTime(m_Start.ToDateTime() + m_Duration); }
}
public override string ToString()
{
return m_Start.ToString() + " - " + End.ToString();
}
}
public class ShiftDictionary : Dictionary<int,Shift>
{
public event EventHandler DictionaryChanged;
private static int lastID = 0;
public void Add(Shift shift)
{
if (!ContainsValue(shift))
{
lastID++;
Add(lastID, shift);
OnDictionaryChanged();
}
else
throw new ArgumentException("Shift exists", "shift");
}
protected virtual void OnDictionaryChanged()
{
if (DictionaryChanged != null)
{
DictionaryChanged(this, EventArgs.Empty);
}
}
}
public struct RosterEmployeeItem
{
public RosterEmployeeItem(Employee employee, List<int> shifts)
{
m_Employee = employee;
m_Shifts = shifts;
}
private Employee m_Employee;
private List<int> m_Shifts;
public Employee Employee
{
get { return m_Employee; }
set { m_Employee = value; }
}
public List<int> Shifts
{
get { return m_Shifts; }
set { m_Shifts = value; }
}
public override string ToString()
{
return m_Employee.ToString();
}
public string ToString(ShiftDictionary shiftDictionary)
{
StringBuilder returnBuilder = new StringBuilder();
returnBuilder.Append(m_Employee.ToString());
foreach (int shift in m_Shifts)
{
returnBuilder.Append(Environment.NewLine);
returnBuilder.Append(shiftDictionary[shift].ToString());
}
return returnBuilder.ToString();
}
public void AddShift(int shift)
{
if (!m_Shifts.Contains(shift))
m_Shifts.Add(shift);
else
throw new ArgumentException("Shift exists", "shift");
}
}
public struct RosterShiftItem
{
public RosterShiftItem(int shift, List<Employee> employees)
{
m_Shift = shift;
m_Employees = employees;
}
private int m_Shift;
private List<Employee> m_Employees;
public int Shift
{
get { return m_Shift; }
set { m_Shift = value; }
}
public List<Employee> Employees
{
get { return m_Employees; }
set { m_Employees = value; }
}
public string ToString(ShiftDictionary shiftDictionary)
{
StringBuilder returnBuilder = new StringBuilder();
returnBuilder.Append(shiftDictionary[m_Shift].ToString());
foreach (Employee employee in m_Employees)
{
returnBuilder.Append(Environment.NewLine);
returnBuilder.Append(employee.ToString());
}
return returnBuilder.ToString();
}
public void AddEmployee(Employee employee)
{
if (!m_Employees.Contains(employee))
m_Employees.Add(employee);
else
throw new ArgumentException("Employee exists", "employee");
}
}
public struct RosterItem
{
public RosterItem(DateTime date)
{
m_Date = date.Date;
m_ItemsByEmployee = new List<RosterEmployeeItem>();
m_ItemsByShift = new List<RosterShiftItem>();
}
private DateTime m_Date;
private List<RosterEmployeeItem> m_ItemsByEmployee;
private List<RosterShiftItem> m_ItemsByShift;
public DateTime Date
{
get { return m_Date; }
set { m_Date = value.Date; }
}
public List<RosterEmployeeItem> ItemsByEmployee
{
get { return m_ItemsByEmployee; }
set { m_ItemsByEmployee = value; }
}
public List<RosterShiftItem> ItemsByShift
{
get { return m_ItemsByShift; }
set { m_ItemsByShift = value; }
}
public string ToString(ShiftDictionary shiftDictionary)
{
StringBuilder returnBuilder = new StringBuilder();
switch (Roster.View)
{
case Roster.ViewOptions.ByEmployee:
foreach (RosterEmployeeItem item in m_ItemsByEmployee)
{
returnBuilder.Append(item.Employee.ToString());
foreach (int shift in item.Shifts)
{
returnBuilder.Append(Environment.NewLine);
returnBuilder.Append(shiftDictionary[shift].ToString());
}
}
break;
case Roster.ViewOptions.ByShift:
foreach (RosterShiftItem item in m_ItemsByShift)
{
returnBuilder.Append(shiftDictionary[item.Shift].ToString());
foreach (Employee employee in item.Employees)
{
returnBuilder.Append(Environment.NewLine);
returnBuilder.Append(employee.ToString());
}
}
break;
}
return returnBuilder.ToString();
}
public void AddEmployee(Employee employee, List<int> shifts)
{
bool found = false;
foreach (RosterEmployeeItem employeeItem in ItemsByEmployee)
{
if (employeeItem.Employee == employee)
{
foreach (int shift in shifts)
{
if (!employeeItem.Shifts.Contains(shift))
{
employeeItem.Shifts.Add(shift);
found = true;
break;
}
else
throw new ArgumentException("Shift ID " + shift.ToString() + " exists for this employee", "shifts");
}
}
}
if (!found)
{
m_ItemsByEmployee.Add(new RosterEmployeeItem(employee, shifts));
}
foreach (int shift in shifts)
{
found = false;
foreach (RosterShiftItem shiftItem in m_ItemsByShift)
{
if (shiftItem.Shift == shift)
{
if (!shiftItem.Employees.Contains(employee))
{
shiftItem.Employees.Add(employee);
found = true;
break;
}
else
throw new ArgumentException("Employee exists for shift ID " + shift.ToString(), "employee");
}
}
if (!found)
{
List<Employee> employeeList = new List<Employee>();
employeeList.Add(employee);
m_ItemsByShift.Add(new RosterShiftItem(shift, employeeList));
}
}
}
}
public class Roster : List<RosterItem>
{
public static event EventHandler ViewChanged;
public enum ViewOptions
{
ByEmployee, ByShift
}
private static ViewOptions m_View;
public static ViewOptions View
{
get { return m_View; }
set
{
ViewOptions oldView = m_View;
m_View = value;
if (m_View != oldView)
OnViewChanged();
}
}
protected static void OnViewChanged()
{
if (ViewChanged != null)
ViewChanged(null, EventArgs.Empty);
}
}
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
Yeah....What he said..
(That deserves a 5 for quantity even if it's no good )
Simon
|
|
|
|
|
thanx for your effort dave!
ill have a closer look at it as soon as i get a chance. Ill let you know how it goes
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
you.suck = (you.passion != Programming)
|
|
|
|
|
I agree with Simon - it seems that it's just the shifts and employees that are important here.
HarveySaayman wrote: user can setup which shifts the employee works on which days
If that's the case a simple combobox & checked list box or a treeview may be enough. If not, you may need to give us more info.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
Hey dave
ive replied to simons post with some more details if you want to have a look
Thanx
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
you.suck = (you.passion != Programming)
|
|
|
|
|
hi everyone,
I want to add checkbox only to the child node in treeview but not in the parent node. can anyone help me which method and how should i override(TreeNode class) to get the proper output.
Thanks in advance
|
|
|
|
|
This[^] does the opposite - removes the check box on the third level, but it should give you enough to get started.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
Hi Dave
Thanks a lot for ur information. But i am not able to make work the ShowMinusPlus property in treenode.
thanks
|
|
|
|
|
hi,
I want to develop a crack for my applictin that hangs the unauthorized users from using application.
Any idea??
Thanks
Syed Shahid Hussain
|
|
|
|
|
Syed Shahid Hussain wrote: I want to develop a crack for my applictin
Why do you want to crack your own application?
|
|
|
|
|
If its your own application, modify its source code for the required purpose and then release it as an update or patch of your existing application.
-Dave.
------------------------------------
http://www.componentone.com
------------------------------------
|
|
|
|
|
Or simply release the crack, it might generate more interest
|
|
|
|
|
IMHO hanging unauthorized users is too severe.
|
|
|
|
|
I have a windows form of some size say (519, 118)
now i have three pannels there somewhere in the center of the form..
now at run time i want to make some pannel invisible
so how can i resize the form so that it form looks good ..means the space that was dedicated for pannel 1 is removed at run time
Thank you ver much
vikas da
|
|
|
|
|
your panel are in horizontal layout or verticle, what ever be change the logic accordingly
set two properties Location and size
First
location Point (0,0)
size(form.width,form.height/2)
second
location Point (0,form.height/2)
size(form.width,form.height/2)
That's it. (According to my perception)
Be happy
Syed Shahid Hussain
|
|
|
|
|
first of all sorry i was away from my system...
it is not just a pannel on the form i am having grid and some button also...
the pannels are just below the grid and above to buttons ... i was trying to dock the pannel but no luck coz it is neither top nor bottom or verticle ..
thank you very much for ur help ... i am sorry i didnt clear all these points earlier ...
vikas da
|
|
|
|
|
panel3.Visible = false;
this.Size = new Size(this.Height - panel3.Height , this.Width);
i am assuming all three panel are in vertically arranged and panel 3 is the last panel.
or
to make the load of the form as per available controls you can write the resize event of the form.
|
|
|
|
|
Thank you very much for ur reply ... all pannels are horigental let me try with this solution ..
i will do like
panel3.Visible = false;
this.Size = new Size(this.Height , this.Width- panel3.Width);
vikas da
|
|
|
|
|
Hi,
Instead of hiding and resizing the other panel use INHERITED FORM. This approach is better because it uses OOP when designing Windows forms. This concept is similar with MASTER PAGE of ASP.NET.
Regards,
|
|
|
|
|
can you please explain me bit more...
from where i should inherit and what functionality(property) should be there so the resizing part can be done easily ...
vikas da
|
|
|
|
|
.......................................................................
. .
. .
. .
. .
. .
. .
. .
. |--------------------------| .
. | pannel1 | .
. |--------------------------| .
. |--------------------------| .
. | pannel2 | .
. |--------------------------| .
. | pannel3 | .
. |--------------------------| .
. .
. .
. .
. .
.......................................................................
so in above if i am saying panel1.hide so panel2 and panel3 should be on the place of panel1 and panel2 respectively
i want to solve this one .. please help me ...
vikas da
|
|
|
|
|
Hi,
What is the reason why you want to place those panels in one form and not creating 3 different forms? Is it you want to reuse the method, function and properties of form you've created and you don't want to repeat this codes in other form plus they have the same look and feel with some slight differences in Pane1, Panel 2 and Panel3. If your answer is YES you should go to inherited form.
NOTE: Methods and Properties of Parent Form are visible to inherited Form (Only Public and Protected access modifiers).
Parent Form
.......................................................................
. .
. .
. |--------------------------| .
. | Static Design | .
. |--------------------------|
. .
. .
. .
. |--------------------------| .
. | Area for | .
. | Other Panel | .
. |--------------------------| .
. .
. .
. .
. .
.......................................................................
Inherited Form
Locked Static Design means you can only edited this on Parent Form.
.......................................................................
. .
. .
. |--------------------------| .
. | Locked - Static Design | .
. |--------------------------|
. .
. .
. .
. |--------------------------| .
. | Area for | .
. | Other Panel | .
. |--------------------------| .
. .
. .
. .
. .
.......................................................................
The result of this approach is you have 4 Forms but you never repeated any codes that already created in Parent Form and you have more manageable codes.
To create inherited form you should go to usual process of adding new forms in the project but now you will select the object Inherited form then follow the wizard
|
|
|
|
|
No need for resizing, treat inherited forms as a new form with extra codes and design.
|
|
|
|
|
Hi
I want to develop a viso link line control. That can be attach with any shape and it has some mid points from them we can adjust its path.
Any idea, code sample or relavent article is welcomed.
Thanks
Syed Shahid Hussain
|
|
|
|