|
Apologies for the shouting but this is important.
When answering a question please:
- Read the question carefully
- Understand that English isn't everyone's first language so be lenient of bad spelling and grammar
- If a question is poorly phrased then either ask for clarification, ignore it, or mark it down. Insults are not welcome
- If the question is inappropriate then click the 'vote to remove message' button
Insults, slap-downs and sarcasm aren't welcome. Let's work to help developers, not make them feel stupid..
cheers,
Chris Maunder
The Code Project Co-founder
Microsoft C++ MVP
|
|
|
|
|
For those new to message boards please try to follow a few simple rules when posting your question.- Choose the correct forum for your message. Posting a VB.NET question in the C++ forum will end in tears.
- Be specific! Don't ask "can someone send me the code to create an application that does 'X'. Pinpoint exactly what it is you need help with.
- Keep the subject line brief, but descriptive. eg "File Serialization problem"
- Keep the question as brief as possible. If you have to include code, include the smallest snippet of code you can.
- Be careful when including code that you haven't made a typo. Typing mistakes can become the focal point instead of the actual question you asked.
- Do not remove or empty a message if others have replied. Keep the thread intact and available for others to search and read. If your problem was answered then edit your message and add "[Solved]" to the subject line of the original post, and cast an approval vote to the one or several answers that really helped you.
- If you are posting source code with your question, place it inside <pre></pre> tags. We advise you also check the "Encode "<" (and other HTML) characters when pasting" checkbox before pasting anything inside the PRE block, and make sure "Use HTML in this post" check box is checked.
- Be courteous and DON'T SHOUT. Everyone here helps because they enjoy helping others, not because it's their job.
- Please do not post links to your question into an unrelated forum such as the lounge. It will be deleted. Likewise, do not post the same question in more than one forum.
- Do not be abusive, offensive, inappropriate or harass anyone on the boards. Doing so will get you kicked off and banned. Play nice.
- If you have a school or university assignment, assume that your teacher or lecturer is also reading these forums.
- No advertising or soliciting.
- We reserve the right to move your posts to a more appropriate forum or to delete anything deemed inappropriate or illegal.
cheers,
Chris Maunder
The Code Project Co-founder
Microsoft C++ MVP
|
|
|
|
|
Hello & Salutations to Everyone, using: Win Forms .NET 4.7.2
I have a set of Form buttons named button1, button2, button3,………
I have an array of strings BUTTON_LIST_str[] =” button1”, “button2”, “button3”,…
I have a function:
private void APPLY_BUTTON_CFG(Button b)
{ …………… }
What I need to do is loop through BUTTON_LIST_str[] and pass each button object to APPLY_BUTTON_CFG(Button b).
Basically for every string I need to use for pointing to a different type form object or its property of object, I get the error "String cannot be converted to the object required type/format (System.Form......)
I have searched every convoluted order of words for hours and cannot find a solution that matched my scenario of converting strings to all form object types (or specific ones either). With so many unique object specific variables how does one research the solution to convert a string to each type for each case?
Is there a ConvertToType universal function that solves this issue.
I also ran into same problem with:
FlatStyle P_STYLE = “Flat”;
Button1.FlatStyle = P_STYLE or FlatStyle.P_STYLE ; // error cannot convert string to…………..FlatStyle object type
I understand that a string name cannot point to a form object OOP when passing to a function. I’m not sure I can ask my question competently………….
With so many unique object specific variables how does one research the string conversion solution for each case?
Simply put, how would I research and find the solution for these types of problems:
Button1.FlatStyle = How to convert string to FlatStyle object reference, or Font, TextAlign when an error occurs?
I did find this translator for colors but not FlatStyle though or for any other applicable parameters.
P_COLOR = System.Drawing.ColorTranslator.FromHtml("White"); //"White" will be replaced with a string array element CFG_PARAM_PARSED[2]);
Button1.ForeColor = P_COLOR;
This is the real kicker: Button name as string (String_Array[x]) needs conversion (typecast?) to object name reference
var ButtonObject = String_Array[x]; or Button ButtonObject = String_Array[x];
APPLY_BUTTON_CFG(ButtonObject);
private void APPLY_BUTTON_CFG(Button b)
{
……………
}
Thank You So Much for your time and assistance…………………….
|
|
|
|
|
You would be much better off adding the controls themselves to the array, not the names of them. Those are bad control names by the way.
Why? Because if you go back and change the names of the controls to something sensible and debuggable, you need have to go through the code and find the control names you stuck in arrays and change those too.
Did you Google for "C# Windows Forms find control by name[^]"? There's plenty of results.
|
|
|
|
|
Hello Dave and Thank You very Much,
I understand and agree with you completely but I am taking an inverse approach due to my apps functionality. I am creating a SendKeys keyboard emulator which will have a pre compiled set of universal buttons all referenced by the simple button1-n name. I will have an excel config file with the button’s parameters (visibility, location, size, text, colors.... and key code) which will be loaded for each application I want to keyboard emulate. Instead of having to have multiple form layouts and keycodes for each interface application I will have a simple excel file to copy cut and paste parameters.
So from my excel config I can set number and string parameters but I can't store and retrieve object oriented parameters (def?), I have to store & retrieve them as strings.
The problem that hangs me up is when I have a parameter such as FlatStyle with has arguments of Standard, Flat, PopUp... that are not strings but some type of object property. So when I need to retrieve PopUp as a string I need to convert it to a type of object property.
var TypeOfStyleObject = convert-this-string-to-what-FlatStyle-wants("PopUp"); // PopUp will actually be a StringArray[x]
button1.FlatStyle = TypeOfStyleObject;
I studied the link you pointed out and it solved my problem, with an exception. I fetched the name of the CONTROL (not a specific control like Button) and changed my function input from BUTTON to CONTROL. It passed without error but I did find a catch....
In the function that I apply the configuration parameters to the generic buttons I successfully applied Text, BackColor, ForeColor as a quick test. When I was passing the Button control I was setting FlatStyle but getting a string to object error (above). Now that I am passing the Control control it is saying my "Control" does not have a parameter FlatStyle. I am interpreting this way..... the Control lets me work without specifying the type of object(button, label, RTBox) but I may lose access to some parameters??? Accurate??
I may need to still find a way of passing specific controls instead of generic control object so I don’t lose configurability. I could follow your lead of preloading a Button[] object array and trying see if I can use its index as an object.
Am going anywhere but backwards or circles…… I assuming there has to be some methods that allows you to convert-this-string-to-what-AnyObject-wants() so objects can be acted on in loops and sequences. You have to be able to store & retrieve non numeric config info (strings) that represent object.string.parameterss!!!!! read them & convert to string, save, retrieve, convert string back to object.
Thank You Again………….
|
|
|
|
|
If you look at the documentation for all these features you will see that they invariably have a numeric value which you can pass to the constructor, or set dynamically.
|
|
|
|
|
Your control is (still) also a button, and you can test for that using "is" and "as", and switch between them.
https://stackoverflow.com/questions/3786361/difference-between-is-and-as-keyword
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Thank You to Everyone ,
Your time is valuable and I appreciate it…………
I don’t comprehend ‘yet’ why when I pass a Button reference, I have a parameter to modify but when I pass it as a Control I’m told this parameter is no longer available, at the top level. I do understand there are other hooks into the control I haven’t learned yet.
The reality of the matter is I stepped on a puddle and found out it was a pot hole, I’m sailing in unfamiliar waters. I am a self-taught C#’er with a background from Verlog FPGA and C firmware with no one local to tutor me. I started writing GUI’s in order to aid and test FPGA and firmware code development plus the automation of production testing.
I’ve gotten away so far by walking around the ‘object mountain’ and I’ve reached a point I need to climb it. I have a strong background in state machine development and implementation, I just need to up the game on ‘objects’. I’m pretty good at making a big snow ball if I can figure out which direction to roll down the hill………..
As can been seen from my post I lack the vocabulary………… I was searching for Button when I should have been researching Controls. I fully comprehend the feedback I am getting but I’m lost in the implementation. Not having a full vocabulary in object language can you point me to a youtube series that would be a good launching point for me at my current level of comprehension. I find a free-flowing mind on video conveys more implementation guidance than a rigid text of facts.
A finger pointing in the right direction is all I really need…………..
Thank You Again for your time and help…….
|
|
|
|
|
Everything in c# (.NET) is an "object".
You then add dressing (a class) and turn it into something else. Add another class and make a composite of what came before. But it is still an "object" and also whatever comes after; you're just putting on and taking off diffferent coats. That's "inheritance" ... one of the "3 pillars" of OOP.
That, and understanding "value types" versus "reference types" ("pointers" to "objects" or functions) allow you to model just about anything in software.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Is that the essence of “wrapping”?? I have seen that term with a few libraries I have fiddled with from GitHub.
“understanding "value types" versus "reference types" ("pointers" to "objects" or functions)”
That sounds like the perfect search phrase to get me started………….
Thanks Again…………..
|
|
|
|
|
"Wrapping" (which is a "design pattern") is intentionally "hiding" one object by wrapping it with another in order to protect or facilitate certain features; not the same as "inheriting" which "adds" functionality.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Sounds a lot like a decorator pattern. Do you despise it? I mean, I do like adding functionality by using a decorator, and the .NET framework apparently too, as there are a lot of places where we use them.
Bastard Programmer from Hell
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I said a wrapper can hide or "facilitate"; which is a good thing. I wrapped a C++ "animation" engine in a FoxPro dll so I could generate 3rd graphics using FoxPro. I did it to earn a license that normally cost $8,000. (A "long" time ago). I could create and race a buggy over 3D terrain ... The ultimate plan was to use the graphics engine in my "rail car repair system", but that's another track.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Codice Fictor wrote: Simply put, how would I research and find the solution for these types of problems:
The general problem is that you need to map one value to another value.
The specifics of the values for each is not really relevant. The process however, obviously, is.
Being a bit more specific to your problem you want to map a 'string' (text) to something.
I can't actually tell what you want to map to. But lets say, for example, that it is enum.
Then there are two choices.
1. The string must match the name of the enum exactly. You can get by without case sensitivity but otherwise it must be the same.
2. You MUST provide code that maps from the string to the enum.
Note that there are NO other choices. Pick one.
Lets say you want to pick 1. Then you cannot name a key 'A Key' because a space is not something that can appear in a enum name. You can google for how to convert from string to enum and back again.
Or if you pick 2. There are various ways to do this. But one way actually ends up looking like solution 1. So for example you would have a table that looks like what I posted below. You would read it then match the first value. Then use the second value to create an enum (like I said similar to 1.)
'A Key', 'KeyA'
'B Key', 'KeyB'
'= Key', 'KeyEquals'
Or you could just create a switch
switch(keyValue)
{
case "A Key": return KeyValue.KeyA;
case "B Key": return KeyVAlue.KeyB;
There are variations on this.
|
|
|
|
|
It’s getting clear now…. Because of my background and my only experience with C# is working with objects, refs and pointers created and generated at run time, I was lost on setting up a reference (linking them) in my code with the instantiation of a pre-existing object dragged onto the Form. Every help link is about creating an object with your definitions and manipulating what you created not syntax/methodology on decoding what you didn’t create.
Thank you………..
And I understand Class and SubClass structure but not how to maneuver around in it in C#.
Now that I can pass my Form Control around in my code I’m not sure the buzz words to comprehend this problem (abbreviated):
private void ManuplateButtons(Control InputButton)
{
InputButton.Text = // Good
Button12.FlatStyle = // Good (pre-instantiated on Form)
InputButton.FlatStyle = // CS1061 'type' does not contain a definition …………
Button FlatStyle is available but Control FlatStyle is not in the list of parameters. So now I need to learn how to dig into the object reference(Control InputButton) to find how FlatStyle is referenced inside of the object reference (Control InputButton).
Is it Control.InputButton.A.B.C nope, so I need to learn how to navigate into the object reference (Control InputButton) and query where FlatStyle is stored or discover what else I can do with an object I didn’t create. I imagine this is not an across the board answer because of the many things you could put/reference in an object.
Timeout; I was composing this when I just read jschell’s post. I believe I have caught up to your post.
In reference to above and #1: I usually depend on the Visual Studio dropdown list and look up the details of the options available until I find the parameter/function that I need or the research of the p/f leads me to an answer. The available button12.X where x = Flatstyle, Flatstyle is in the list but in the case of reference(Control InputButton). Flatstyle is not in the list so I must find it……….. methodology unknown to me ‘yet’.
“…..convert from string to enum” but I need to find the enum def for reference(Control InputButton).Flatstyle before I can convert my string to the relevant enum. I understand the cross correlation between 1 & 2 of jschell’s post.
What are the key search phrases of OOP for the methodology and implementation of how discover what is enumerated in an object that is not shown in the dropdown list, because if “string must match the name of the enum exactly” I need to find the exact spelling or the relevant reference. I know a blind search is going to give me a 1000 hits on how to enumerate a string not how to dig into an unknown enumerated string to find out what is inside, so any tips or pointer links on how to decode an existing object would be useful. Once I learn what is available inside I can learn how to manipulate it…………
Thanks……….
|
|
|
|
|
Button, inherits from ButtonBase, which inherits from Control.
FlatStyle is defined in ButtonBase. At a minimum, you need to "cast" Control to ButtonBase to access that property.
As a side note, ButtonBase is an "abstract" class: you can't actually create ButtonBase except via a class that inherits it (like Button, CheckBox, and RadioButton; or your own "custom" button).
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
i want code to search in data grid view by date that the same date in date time picker tool in the same form ?
|
|
|
|
|
And what help are you expecting from this forum?
|
|
|
|
|
OK, the only code you get is the code YOU write.
Don't search the grid. Search the DataSource your grid should be bound to. If you're not already doing this, you're making it much more difficult on yourself.
|
|
|
|
|
Dave Kreskowiak wrote: OK, the only code you get is the code YOU write. When people ask for code, we now can direct them toward ChatGPT. *evil grin*
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
I waded through all the detritus that the AI powered search engines tossed at me, and managed to narrow things down with:
Quote: C# search for date gridview from date picker
https://stackoverflow.com/questions/62045173/filter-datagridview-from-datepicker
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Probably the most relevant part of that link is the following very important advice when searching for time values.
"Because, no matter how hard I tried, I could not remove the time from the datetime value . . . I decided to use a greater than date and less than date."
Although it is still incorrect.
That is exclusive on both ends. One needs to to exclusive on one end and inclusive on the other.
|
|
|
|
|
1 namespace ATAS.Indicators.Technical;
2
3 using ATAS.Indicators.Drawing;
4 using OFT.Localization;
5 using OFT.Rendering.Context;
6 using OFT.Rendering.Settings;
7 using OFT.Rendering.Tools;
8 using System;
9 using System.ComponentModel;
10 using System.ComponentModel.DataAnnotations;
11 using System.Drawing;
12 using System.Runtime.Intrinsics.X86;
13 using Color = System.Drawing.Color;
14
15 [DisplayName("Candle X")]
16 public class CandleStatist : Indicator
17 {
18 #region Nested types
19
20 public enum LabelLocations
21 {
22 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.AboveCandle))]
23 Top,
24
25 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.BelowCandle))]
26 Bottom,
27
28 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.ByCandleDirection))]
29 CandleDirection
30 }
31
32 #endregion
33
34 #region Fields
35
36 private readonly PenSettings _bgPen = new() { Color = DefaultColors.Gray.Convert() };
37 private readonly BrushSettings _bgBrush = new();
38 private readonly RenderStringFormat _format = new()
39
40
41 {
42 Alignment = StringAlignment.Center,
43 LineAlignment = StringAlignment.Center,
44 };
45 private int _backGroundTransparency = 8;
46
47
48
49 const int X = 100;
50 public double uhv;
51 private double av;
52 public double r;
53 public double ar;
54 public double uwrb;
55 public double wrb;
56 public double u3;
57 public double m3;
58 public double l20d;
59
60
61 #endregion
62
63 #region Properties
64
65 #region Settings
66
67 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.LabelLocation), GroupName = nameof(Strings.Settings))]
68 public LabelLocations LabelLocation { get; set; } = LabelLocations.Top;
69
70 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.ShowVolume), GroupName = nameof(Strings.Settings))]
71 public bool ShowVolume { get; set; } = true;
72
73 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.ShowDelta), GroupName = nameof(Strings.Settings))]
74 public bool ShowDelta { get; set; } = true;
75
76 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.ClustersMode), GroupName = nameof(Strings.Settings))]
77 public bool ClusterModeOnly { get; set; }
78
79 #endregion
80
81 #region Visualization
82
83 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.Volume), GroupName = nameof(Strings.Visualization))]
84 public Color VolumeColor { get; set; } = DefaultColors.White;
85
86 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.PositiveDelta), GroupName = nameof(Strings.Visualization))]
87 public Color PositiveDeltaColor { get; set; } = Color.Green;
88
89 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.NegativeDelta), GroupName = nameof(Strings.Visualization))]
90 public Color NegativeDeltaColor { get; set; } = Color.Red;
91
92 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.BackGround), GroupName = nameof(Strings.Visualization))]
93 public Color BackGroundColor
94 {
95 get => _bgPen.Color.Convert();
96 set
97 {
98 _bgPen.Color = value.Convert();
99 _bgBrush.StartColor = GetColorTransparency(value, BackGroundTransparency).Convert();
100 }
101 }
102
103 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.HideBackGround), GroupName = nameof(Strings.Visualization))]
104 public bool HideBackGround { get; set; } = true;
105
106 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.Font), GroupName = nameof(Strings.Visualization))]
107 public FontSetting FontSetting { get; set; } = new("Times New Roman", 6);
108
109 [Range(0, int.MaxValue)]
110 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.Offset), GroupName = nameof(Strings.Visualization))]
111 public int Offset { get; set; } = 10;
112
113 [Range(1, 10)]
114 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.BorderWidth), GroupName = nameof(Strings.Visualization))]
115 public int BorderWidth
116 {
117 get => _bgPen.Width;
118 set => _bgPen.Width = value;
119 }
120
121 [Range(0, 10)]
122 [Display(ResourceType = typeof(Strings), Name = nameof(Strings.Transparency), GroupName = nameof(Strings.Visualization))]
123 public int BackGroundTransparency
124 {
125 get => _backGroundTransparency;
126 set
127 {
128 _backGroundTransparency = value;
129 _bgBrush.StartColor = GetColorTransparency(BackGroundColor, BackGroundTransparency).Convert();
130 }
131 }
132
133 #endregion
134
135 #endregion
136
137 #region ctor
138
139 public CandleStatist() : base(true)
140 {
141 DenyToChangePanel = true;
142 DataSeries[0].IsHidden = true;
143 ((ValueDataSeries)DataSeries[0]).ShowZeroValue = false;
144
145 EnableCustomDrawing = true;
146 SubscribeToDrawingEvents(DrawingLayouts.Final);
147
148 _bgPen.Color = BackGroundColor.Convert();
149 _bgBrush.StartColor = GetColorTransparency(BackGroundColor, _backGroundTransparency).Convert();
150 }
151
152 #endregion
153
154 #region Protected methods
155
156 protected override void OnCalculate(int bar, decimal value)
157 {
158 }
159
160 protected override void OnRender(RenderContext context, DrawingLayouts layout)
161 {
162 if (ChartInfo == null)
163 return;
164
165 if (ClusterModeOnly && ChartInfo.ChartVisualMode != ChartVisualModes.Clusters)
166 return;
167
168 DrawLabels(context);
169 }
170
171 #endregion
172
173 #region Private methods
174
175 public readonly SMA _sma = new SMA() { Period = X };
176 public readonly HighestX _highestX = new HighestX() ;
177 public readonly LowestX _lowestX = new LowestX();
178
179 private void DrawLabels(RenderContext context)
180 {
181 if (!(ShowDelta || ShowVolume))
182 return;
183
184 for (int bar = FirstVisibleBarNumber; bar <= LastVisibleBarNumber; bar++)
185 {
186 var candle = GetCandle(bar);
187
188
189 var av = _sma.Calculate(X, (candle.Volume));
190 var uhv = ((candle.Volume) > (2 * av));
191 var r = (candle.High - candle.Low);
192 var ar = _sma.Calculate(X, (candle.High - candle.Low));
193
194
195 var uwrb = (r > (2m * ar));
196 var wrb = (r > (1.33m * ar)) && (r < (2m * ar));
197 var u3 = (candle.Close > (candle.High - (r / 3)));
198 var m3 = (candle.Close > (candle.High - (r / 3))) && (candle.Close > (candle.Low + (r / 3)));
199
200 var prevCandle = GetCandle(bar-1);
201 var l20d = (candle.Low) < prevCandle.(_lowestX.Calculate(20, candle.Low));
202
203
204
205
206 var delta = candle.Delta;
207 var volumeStr = ChartInfo.TryGetMinimizedVolumeString(candle.Volume);
208 var deltaStr = ChartInfo.TryGetMinimizedVolumeString(delta);
209
210 var shiftBetweenStr = (int)(FontSetting.RenderObject.Size / 100 * 20);
211 var shift = 2;
212
213 var volumeSize = new Size();
214 var deltaSize = new Size();
215
216 if (ShowVolume)
217 volumeSize = context.MeasureString(volumeStr, FontSetting.RenderObject);
218
219 if (ShowDelta)
220 deltaSize = context.MeasureString(deltaStr, FontSetting.RenderObject);
221
222 var h = volumeSize.Height + deltaSize.Height + shift * 2 + shiftBetweenStr;
223 var y = (int)GetStartY(candle, h);
224 var w = Math.Max(volumeSize.Width, deltaSize.Width) + shift * 2;
225 w = GetTrueWidth(w);
226 var x = ChartInfo.GetXByBar(bar) + (int)((ChartInfo.PriceChartContainer.BarsWidth - w) / 2);
227
228 var rectangle = new Rectangle(x, y, w, h);
229
230 if (!HideBackGround)
231 context.DrawFillRectangle(_bgPen.RenderObject, _bgBrush.RenderObject.StartColor, rectangle);
232
233 if (ShowVolume)
234 {
235 y += shift;
236 var rec = new Rectangle(x, y, w, volumeSize.Height);
237 context.DrawString(volumeStr, FontSetting.RenderObject, VolumeColor, rec, _format);
238 }
239
240 if (ShowDelta)
241 {
242 y += volumeSize.Height > 0 ? volumeSize.Height + shiftBetweenStr : shift;
243 var rec = new Rectangle(x, y, w, deltaSize.Height);
244 var color = delta < 0 ? NegativeDeltaColor : PositiveDeltaColor;
245 context.DrawString(deltaStr, FontSetting.RenderObject, color, rec, _format);
246 }
247 }
248 }
249
250 private string GetTrueString(decimal value)
251 {
252 var absValue = Math.Abs(value);
253
254 if ((int)absValue < absValue)
255 return value.ToString().TrimEnd('0');
256
257 return value.ToString();
258 }
259
260 private int GetTrueWidth(int width)
261 {
262 return Math.Min(width, (int)ChartInfo.PriceChartContainer.BarsWidth);
263 }
264
265 private decimal GetStartY(IndicatorCandle candle, int height)
266 {
267 var topHeight = ChartInfo.GetYByPrice(candle.High) - Offset - height;
268 var bottomHeight = ChartInfo.GetYByPrice(candle.Low) + Offset + ChartInfo.PriceChartContainer.PriceRowHeight;
269
270 return LabelLocation switch
271 {
272 LabelLocations.Top => topHeight,
273 LabelLocations.Bottom => bottomHeight,
274 LabelLocations.CandleDirection => candle.Open > candle.Close
275 ? bottomHeight
276 : topHeight,
277 _ => 0,
278 };
279 }
280
281 private Color GetColorTransparency(Color color, int tr = 5)
282 {
283 var colorA = Math.Max(color.A - (tr * 25), 0);
284
285 return Color.FromArgb((byte)colorA, color.R, color.G, color.B);
286 }
287
288 #endregion
289 }
modified 3 days ago.
|
|
|
|
|
What is the exact error message?
|
|
|
|
|
cs1001 identifier expected its in line 201
|
|
|
|
|