|
Thanks Matt -
I needed to have a hashtable of months of the year:
"January","1"
"February","2"
...
and be able to get a month based on a numeric index OR an index based on a month string.
I thought it would be easy with a Hashtable but you're right - it doesn't support lookups by value assuming you could have multiple 'values' with different keys. But there are a lot of cases like this where I know there is a one to one mapping of name/value pairs. Items that are always used in association and are unique.
I used a simple array and wrote a finder method that looked like this:
<br />
string[] months = {"Jan","Feb","Mar",...}<br />
<br />
private int GetMonthIndex(string mo){<br />
for(int i=0;i<mos.Length;i++){<br />
if(mos[i]==mo)return i+1;<br />
}<br />
return -1;
}<br />
Incidentally I asked my perl jedi master and he must have been laughing when he wrote this:
<br />
$hash{'David'} = 'C#';<br />
$hash{'Chris'} = 'Perl';<br />
@keys = grep { $hash{$_} eq 'Perl' } keys %hash; #perl is s1ck<br />
In the end, while I didn't change my use of a simple array and a brutally slow sequential search, I wrote this for future reference:
<br />
public static string GrepHashForKey(Hashtable ha, string search){<br />
foreach(object o in ha.Keys){<br />
if(ha[o].ToString().Equals(search))<br />
return o.ToString();<br />
}<br />
return "";<br />
}<br />
*->>Always working on my game, teach me
*->>something new.
cout << "dav1d\n";
|
|
|
|
|
Just use an ArrayList. Just make sure you add the months to the ArrayList in the right order. Like this:
ArrayList months = new ArrayList();
months.Add("January");
months.Add("February");
int monthNum = months.IndexOf("January") + 1;
string monthName = months[monthNum - 1];
That should do it eh?
-Matt
------------------------------------------
The 3 great virtues of a programmer:
Laziness, Impatience, and Hubris.
--Larry Wall
|
|
|
|
|
A two liner for my woes! Humbling but good to know -
Thanks Matt.
*->>Always working on my game, teach me
*->>something new.
cout << "dav1d\n";
|
|
|
|
|
afronaut wrote:
I needed to have a hashtable of months of the year:
"January","1"
"February","2"
...
and be able to get a month based on a numeric index OR an index based on a month string.
static string PrintMonth(int i)
{
return new DateTime(0).AddMonths(i).ToString("MMMM");
}
static int PrintMonthNr(string month)
{
for (int i = 0; i < 12; i++)
{
if (PrintMonth(i) == month) return i;
}
return -1;
}
"I dont have a life, I have a program."
|
|
|
|
|
One option (in addition to those you already found) would be TWO hash dictionaries. You could create a class that holds both the key name and value, then have both hashes store the same object, one using the key name as the key and the other using the value as the key.
Additionally, you could create a class that wraps this sort of behaviour, giving you exactly the syntax you wanted.
John
|
|
|
|
|
It appears that the old VB6 approach of a messageBox function that displayed info, possibly got info, and passed back the info or the button selection does not exist in the Framework.
To do a modal dialogBox I need to create my own form and set the AccessibleRole = Dialog.
For my buttons, I set DialogResult to the value I want to return.
So I guess that I would follow the following steps to create a Verify (yes, no) dialog box:
Create a form named Verify.
Set the AccessibleRole to Dialog.
Define my screen (example: Do you want to do this?) with two buttons, Yes, No. Define DialogResult as No for the No button and Yes for the Yes button.
In my main program, I code:
VerifyDialog myDialog = new VerifyDialog;<br />
if (myDialog.ShowDialog(this) == DialogResult.Yes)<br />
{<br />
go ahead and do this.<br />
}
Am I on the money or about to toss a handgrenade?
Thanks for help.
_____________________________________________
I have a tendancy to where my mind on my sleeve I have a habit of losing my shirt...
|
|
|
|
|
try this instead :
VerifyDialog myDialog = new VerifyDialog;
if (myDialog.Show()==DialogResult.Yes)
{
go ahead and do this.
}
Cheers,
Daaron
|
|
|
|
|
You were responding as I was updating my post as I was also doing the coding as I was following the message board. Is that multi-tasking or what???
_____________________________________________
I have a tendancy to where my mind on my sleeve I have a habit of losing my shirt...
|
|
|
|
|
The AccessibleRole property is a red herring - it's related to Accessibility for disabled users.
|
|
|
|
|
If you are just asking for confirmation you can use the MessageBox class to display a message box (MsgBox in VB6).
If you need the user to input something (something beyond clicking a button) then you'll have to use the approach you have now.
[edit]
Sample code would probably help you
MessageBox.Show("Are you sure you want to do this?",
"Are you sure?",
MessageBoxButtons.YesNo
);
The Show method returns a DialogResult like you are already using.
[/edit]
James
- out of order -
|
|
|
|
|
I am using transparency effects to create shaped windows, I have followed the basic tutorial found here :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchShapedWindowsFormsControlsInVisualStudioNET.asp
Now on my machine this works like a dream, but on other machines it does not work correctly - transparency doesnt work at all. All machines are set to the same resolution and colour depth (32bpp).
Does anybody have any ideas on the cause of this?
More info :
The image in question is a 24bit bmp, the transparency key I am using is 255,0,255 (fuschia)
|
|
|
|
|
MrEyes wrote:
Now on my machine this works like a dream, but on other machines it does not work correctly - transparency doesnt work at all. All machines are set to the same resolution and colour depth (32bpp).
Are the other test machines running Windows XP?
As far as I know only WXP supports transparency out of the box.
Paul Watson Bluegrass Cape Town, South Africa Ray Cassick wrote: Well I am not female, not gay and I am not Paul Watson
|
|
|
|
|
Windows 2000 and greater support transparency. (95/98/Me Dont)
Contract Software Developer: andrew_lewis@mail.com
|
|
|
|
|
Andrew Lewis wrote:
Windows 2000 and greater support transparency. (95/98/Me Dont)
Ahhh, thanks, my mistake
Paul Watson Bluegrass Cape Town, South Africa Ray Cassick wrote: Well I am not female, not gay and I am not Paul Watson
|
|
|
|
|
Subject.
=====================
http://wasp.elcat.kg
|
|
|
|
|
Ahhh, thanks, my mistake
Paul Watson Bluegrass Cape Town, South Africa Ray Cassick wrote: Well I am not female, not gay and I am not Paul Watson
|
|
|
|
|
Thanks for the replies but unfortunatly they dont bring me any closer to an answer. The following is a summary of the test machines :
1) Win 2000 (SP2) - 1024*768 - 32bit color depth
2) Win XP - 1024*768 - 32bit color depth
3) Win 2000 (SP2) - 1024*768 - 32bit color depth
4) Win XP - 1024*768 - 32bit color depth
Now my form background transparency works fine on machines 1 & 2 but does not work on other two (2 & 3). I have also noticed that "opacity" works on all machines (i.e. setting the entire form to 25% opactity results in a "see through" form)
I have also tried using different image formats (i.e. gif) and also different transparency colors (current using fuschia (255,0,255) all to no avail.
I am 100% this is probably all being caused by some option I have missed, but if that is the case it isnt detailed in MSDN link above
Once again, thanks for the replies so far, any further suggestions would be greatly appreciated
PS. if anybody is interested enough, a copy of the VS .NET projects files can be found here (http://www.randomportal.com/shapedwindow.zip 256kb) - bear in mind this is a test application and is not "pretty"
PPS. Alternativly the following is the source code for the form (bear in mind that the image is held with a resx resource file). This code is also autogenerated by VS .NET, so one would assume that its correct, hmmmm
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace ShapedWindow
{
public class Form1 : System.Windows.Forms.Form {
private System.ComponentModel.Container components = null;
public Form1() {
InitializeComponent();
}
protected override void Dispose( bool disposing ) {
if( disposing ) {
if (components != null) {
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackgroundImage = ((System.Drawing.Bitmap)(resources.GetObject("$this.BackgroundImage")));
this.ClientSize = new System.Drawing.Size(229, 228);
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Form1";
this.TopMost = true;
this.TransparencyKey = System.Drawing.Color.Fuchsia;
}
[STAThread]
static void Main() {
Application.Run(new Form1());
}
}
}
|
|
|
|
|
MrEyes wrote:
I have also noticed that "opacity" works on all machines
Silly me, I thought you were talking about opacity all along.
Anyway I had a look around and from what I can tell shape forms using the TransparencyKey are not reliable.
Shaped Windows Forms and Controls in Visual Studio .NET[^] says "Note Monitors set to a color depth of greater than 24-bit can display problems with certain parts of the form not being transparent, despite setting of the TransparencyKey property. To avoid this problem, ensure that the monitor's color depth is set to less than 24-bit in the Display control panel. When developing applications that feature this transparency, keep in mind that you will have to make your users aware of this issue." which is pretty pathetic IMO as they offer no help or even admit there is a bug.
Paul Watson Bluegrass Cape Town, South Africa Ray Cassick wrote: Well I am not female, not gay and I am not Paul Watson
|
|
|
|
|
Buggary
I saw that section and speed read it, assuming it was some inconsequential bug
|
|
|
|
|
Sooooo
Does anybody have any experience of using Transparent BLT in C#?
|
|
|
|
|
Just expose the item you want from the dialog by using a property. As long as your dialog object is still in scope, you can grab properties from it even though the window no longer dislplays. For instnace:
MyDialog dlg = new MyDlg();
string info;
if( dlg.ShowDialog(this) == DialogResult.OK )
{
info = dlg.Info
}
-------------------------
public string Info
{
get { return _info; }
}
Hope that helps.
-Matt
------------------------------------------
The 3 great virtues of a programmer:
Laziness, Impatience, and Hubris.
--Larry Wall
|
|
|
|
|
I am currently planning a football stats project for the local football teams (in C# of course ). It's going to be a Windows Forms app. So should I use XML or a database?
There won't be more than one user on the data store at any one time, so it's just a matter of what one is easier to adjust dynamically.
Any Pros & Cons to using an Access DB over XML or vice versa?
--Thanks for any advice.
********************
* SteveMcLenithan
* steve@steve-mac.com
* http://steve-mac.com
********************
|
|
|
|
|
Using Access at all can be a con in itself. That being said, you can't beat it for portability and cost effectiveness. The only thing I would keep in mind there is that there is, to my knowledge, no easy way to create Access databases on the fly in C# shy of using ADOX and COM+. If you don't need to creat the database programmatically, though, it's a moot point.
As far as XML goes, you should really just ask yourself why you would use it. XML, while a great and useful technology, isn't the right choice for every application. It sounds to me like you are just wanting to store some simple data that you will manipulate. I would personally go for the database just because it is fairly easy to use and the development time would be pretty quick. Adding XML, on the other hand, could produce unnecessary overhead and time consumption.
If it's your goal to learn more about XML, then it may be worth it to try it that way, but if you're under a time crunch, I would personally go for the straight SQL with a database--primarily because that is what I'm most familiar with, but also because using XML doesn't really give you an added benefit. IMHO
-Matt
------------------------------------------
The 3 great virtues of a programmer:
Laziness, Impatience, and Hubris.
--Larry Wall
|
|
|
|
|
perlmunger wrote:
but also because using XML doesn't really give you an added benefit. IMHO
And when the app invariably needs to scale to more than one concurrent user you run into fun problems *says Paul from stupid experience*
Paul Watson Bluegrass Cape Town, South Africa Ray Cassick wrote: Well I am not female, not gay and I am not Paul Watson
|
|
|
|
|
Thanks for the input. I think I'll stick with the Access DB. At most there will be two different people editing at the same time but always with different tables.
Thanks
********************
* SteveMcLenithan
* steve@steve-mac.com
* http://steve-mac.com
********************
|
|
|
|