|
To add to what Pete has said: We do not do your homework: it is set for a reason. It is there so that you think about what you have been told, and try to understand it. It is also there so that your tutor can identify areas where you are weak, and focus more attention on remedial action.
If we "give you the code" then you never learn how to take a problem, and build a solution for it - you don't learn that from "looking at other people's code" because code doesn't show how it got to the state it is, why it went that way instead of whatever alternatives it could have used. So break down the question into smaller "sub questions" - you have three already. Start looking at the first one as a single problem: "Read the file zomato.csv". Break that into smaller parts:
1) Physically read the file.
2) Process each row in the data into separate columns.
3) Store each row appropriately.
If you can do part of theat, do it. If you can't do a part, break that down into smaller tasks and repeat until you get to bits you can do. Completing smaller bits completes bigger bits! When you have the first part of your problem fixed, move on to the second. And so on.
Try it yourself, you may find it is not as difficult as you think!
If you meet a specific problem, then please ask about that and we will do our best to help. But we aren't going to do it all for you!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hi !
I try to create a multilingual project in C# windows application by following this link, but when I click on the button to change language for the first time and the system need to restart; it still keep this same language or not change yet. I need to repeat it again and then the language is changed, bu the service is running and I can not debug anymore unless I find and disable the service of current project.
I follow multi link,but its the same case.
The link I follow:
Multilingual Support in C# Windows Application | StudentCompanion[^]
What is wrong?
Why I have to repeat the change button for twice in first time use?
And why the service of current project does not stop after I close the project? It is in test debugging.
Thank you.
|
|
|
|
|
Why not ask the people who wrote it: They have a discussion section below the "Article".
They will know a lot more about their code than a random website that has never seen it before ... or at the very least you would hope so ...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
@Sai_Y wrote: And why the service of current project does not stop after I close the project? It is in test debugging.
Are you writing an application, or a windows-service?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
My intention is to publish, here, a tutorial on extending 'Form with a Component in what I hope will be a novel, and useful, way.
As you may know, a component that implements IExtenderProvider (see: [^]) can be drag-dropped into the component UI area of the Form, and will be exposed at design-time by the type of object it extends.
Note that the MSDN sample implementation here: [^] ... as so often, brain-damaged with crap code ... is a Control, not a Component.
Okay, now I have my Component working, extending 'Form; I have solved the problem of detecting the Component instance's run-time Container using reflection (the only way to do it !). Necessary Properties are now exposed in the design-time 'PropertyGrid. Depending on the user's design-time choice, one of four possible "flavors" of another Form are created.
All this is working. The issue now ... is that I want to constrain the number of auxiliary Forms created to only one of each of the four "flavors." AFAIK, this cannot occur at design-time in the Component's code: there aren't any Events, and the 'InitializeComponent method does not get called.
So, which do you think is better: handle preventing duplicates in a special static Class, or handle them in the Form 'Load Event when I enumerate the Components, and take actio based on the user-set Properties ?
thanks, Bill
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Sounds like a "business rule" being baked in; maybe it should be a run-time option; which means at "load time"; preferably with a message if the rules are violated.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Thanks, Gerry, I like the idea of a run-time warning; but, I am curious how, in general, one can detect the drag-drop of a Component on a Form at design-time. It appears that's impossible. This is the code I use to find the custom Extender Provider using the Type of the Container Form:
public IEnumerable<FieldInfo> EnumerateComponents(Type formtype, string targetname)
{
return formtype.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(finfo =>
finfo != null
&& typeof(IExtenderProvider).IsAssignableFrom(finfo.FieldType)
&& finfo.FieldType.Name == targetname);
} cheers, Bill
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
"female.Name" does not change in Form1 MouseEnter event.
How can be implemented a simple event like this, into my "Human" class ?
I must take the mouse coordinates XY and "put" them somewhere, when the event is fired.
But how and where?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace WindowsFormsApplication5
{
class Human
{
public string Name = "none";
public Point location = new Point();
public void Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawString(Name, new Font("Arial", 9), new SolidBrush(Color.Black), location.X - 5, location.Y - 15);
e.Graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(location.X, location.Y, 20, 20));
}
public event EventHandler MouseEnter;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
female.Name = "Alina";
female.location = new Point(30, 30);
female.MouseEnter += new EventHandler(female_MouseEnter);
}
Human female = new Human();
private void Form1_Paint(object sender, PaintEventArgs e)
{
female.Paint(sender, e);
}
void female_MouseEnter(object sender, EventArgs e)
{
female.Name = "Olina";
}
}
}
|
|
|
|
|
For starters, don't make fields public - use properties instead, and keep fields private.
Public fields mean that the interior workings of your class are exposed to the outside world, and you have to think long and hard before you make any changes at all which might affect them. Properties don't. (And they have other advantages when it comes to being used as a DataSource, serialization, and so forth.)
Secondly, Point is a struct not a class, so you only need to use the new keyword if the constructor needs to be called - it doesn't for Point.
class Human
{
private string _Name = "none";
public string Name { get { return _Name; } set { _Name = value; }}
public Point Location { get; set;}
It's also a bad idea to "mock" events in your class:
public void Paint(object sender, System.Windows.Forms.PaintEventArgs e) Is not an event handler, so don't make it look like one! )or someone will try to attach a handler, and get confused.
Instead, just pass the data it needs: the graphics context:
public void Paint(Graphics g)
{
g.DrawString(Name, new Font("Arial", 9), new SolidBrush(Color.Black), location.X - 5, location.Y - 15);
g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(location.X, location.Y, 20, 20));
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
female.Paint(e.Graphics);
}
That way, it's also easier to call it when you want to draw the name when you enter the control.
Finally - and I think I've mentioned this before recently, but I'm not sure if it's to you: Human is a class, but it isn't derived from Control. Which means it doesn't have any interaction directly with the user, and that includes Mouse events. Adding the line
public event EventHandler MouseEnter; doesn;t "hook" your class into the "Mouse events" system, it just creates an event called "MouseEnter" which is never raised by anything. If you want a MouseEnter that actually does something then the class which processes it MUST be based on Control: A Form, a Panel, or a UserControl perhaps.
You can't just add a handler and hope the system will sort it all out for you!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Thank you mister OriginalGriff,
Now I made the suggested rectifications:
public class Human : UserControl
{
public void hPaint(Graphics g)
{
g.DrawString(Name, new Font("Arial", 9), new SolidBrush(Color.Black), Location.X - 5, Location.Y - 15);
g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(Location.X, Location.Y, 20, 20));
}
public override event EventHandler MouseEnter;
}
|
|
|
|
|
Just add a handler, and add the instance to the form's Controls collection.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Make an example for me, Please.
I think in Form1 i must do this? >> Controls.Add(female);
|
|
|
|
|
Try this: remove the line
public override event EventHandler MouseEnter;
And drag your Human class from the toolbox onto your form.
Try it!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
i've made a red square there in the paint event.
It is not showing at all.
Only the text from the same paint event is visible.
When i drag the control from toolbox into my form, a very large grey square appear, but not my red square and its text.
I want the area to be as large as that red square (20,20). When I move my mouse over this red square area, I want the text to change. All this graphics must "float" over other controls. In this way, I can intersect many other controls like these between them.
|
|
|
|
|
Did you add the Paint event handler to your UserControl? Check in the designer!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
alright, now is showing in Form1 after I add this class object to Controls.
I also get rid of the custom paint event i made earlier.
If its not good what i did here, please correct me.
public class Human : UserControl
{
public Human()
{
Paint += new PaintEventHandler(Human_Paint);
}
void Human_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawString(Name, new Font("Arial", 9), new SolidBrush(Color.Black), Location.X - 5, Location.Y - 15);
e.Graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(Location.X, Location.Y, 20, 20));
}
}
|
|
|
|
|
Just as an aside: dont; create Font and Brush (or any graphics items) willy nilly - they all use something called Handles which are in short supply. If you create a graphics item, it needs a fresh handle, so unless you specifically Dispose of it when you are finished, you will crash your app with an "out of memory" exception pretty quickly because the whole system will run out of Handles and become unstable. It's a very good idea to create a static class level Font and Brush item, and use them, or use a using block around the item construction so that it is automatically Disposed when it goes out of scope.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I tell you what: stop what you are doing.
Create a new solution, WinForms, call it "HumanDemo"
Add a UserControl to the project, call it Human.
In the designer, add event handlers to the Human control: MouseEnter, MouseLeave, Paint.
In the Human code, add a field and a property:
private bool isIn = false;
public string Name { get; set; }
In the Human Constructor, add a line, so it looks like this:
public Human()
{
InitializeComponent();
Name = "A name";
}
Then edit the three handlers so they look like this:
private void Human_MouseEnter(object sender, EventArgs e)
{
isIn = true;
Invalidate();
}
private void Human_MouseLeave(object sender, EventArgs e)
{
isIn = false;
Invalidate();
}
private void Human_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Rectangle rect = e.ClipRectangle;
rect.Inflate(-1, -1);
g.DrawRectangle(Pens.Red, rect);
if (isIn)
{
g.DrawString(Name, Font, Brushes.Black, new Point(10, 10));
}
}
Compile your project.
Go to the main form in teh designer, and drag a Human control from your toolbox and drop it on the form.
Run your application. Move the mouse into and out of the red rectangle.
That's how simple it is!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
i made it work now.
modified 22-Dec-18 5:00am.
|
|
|
|
|
See how easy it is?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Your code is not good at all.
Look here in my screenshot:
http://i64.tinypic.com/29dijx3.jpg[^]
The first red square must be visible under the second square control !
With my code, I can make it show one beneath the other one.
|
|
|
|
|
Two things:
1) no image.
2) You didn't think it might have something to do with the order in which you added the controls? Google "Z-order" and start thinking about what you are doing instead of guessing ...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
And did you google "Z-order"?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
i know what z-order is - its not that. I intersect the 2 squares, not putting one on top of the other. Both are z-order dependent but with diferent meanings... you will get my point very easy from my screenshot.
|
|
|
|
|