חסום לי, מה אומר שם?
פורסם במקור בפורום CODE613 ב06/01/2014 08:57 (+02:00)
חסום לי, מה אומר שם?
פורסם במקור בפורום CODE613 ב06/01/2014 08:57 (+02:00)
גם אני מתמיד השתמשתי ב GOTO ב VBA כיון שאין Continue For ושמתי תוית בשורה שלפני ה NEXT
אגב Continue זה לא רק ב FOR אלא גם ב DO וגם ב TRY
פורסם במקור בפורום CODE613 ב06/01/2014 08:30 (+02:00)
לפי המתואר בעזרה של וורד זה כך:
מחרוזת באורך משתנה יכולה להכיל עד כ -2 מליארד (2 ^ 31) תווים.
מחרוזת באורך קבוע יכולה להכיל 1 עד כ (64K (2 ^ 16 תווים.
וזה מדבר על קידוד ASCII אבל אם יש לך תוים בקידוד UTF-8 וכדומה הרי שכל תו לוקח שני ביטים.
בכל מקרה תמיד אתה יכול לחלק את החומר לכמה משתנים למשל למערך שכל איבר יכול חלק מהחומר, או לשמור את הכל בקובץ בדיסק ולקרא כל פעם קטע מהקובץ.
פורסם במקור בפורום CODE613 ב05/01/2014 18:12 (+02:00)
אבל חיפשתי קצת ברשת וראיתי שזה ממש באג ב WPF, שאי אפשר ליצור usercontrol ולשים בתוכו פקדים עם שם עיין כאן.
ממש אכזבה, שדווקא WPF שכל כולה מיועדת לעיצוב פקדים ובנושא זה עצמו יש כזה באג בולט :!:
מה עושים ?
פורסם במקור בפורום CODE613 ב06/01/2014 14:33 (+02:00)
מה חשוב לי זה איך לעשות את זה נח להעברה מתוכנה לתוכנה, ולכן אני מחפש איך לעשות שכל הקוד וכל ה XAML השייך לטאב-קונטרול יישב בקובץ אחד או שניים בפני עצמם, ולא אצטרך לעשות העתק הדבק לקוד ו/או ל XAML לכל חלון שיש לי בו את הטאב קונטרול.
דבר נוסף בטאב-קונטרול שדיברנו באשכולות סמוכים הוספתי תמונה ולזה חייבים ירושה שהרי אני יוצר בשביל זה 'מאפיין תלות' חדש ומאפיין זה מופיע גם בסטולים שב XAML.
פורסם במקור בפורום CODE613 ב05/01/2014 18:21 (+02:00)
דיברנו בפורום לאחרונה על טאב-קונטרול מעוצב, גם לעצב את הטאב-אייטמס וגם שהטאב-אייטמס לא יגלשו לשתי שורות ויהיה סגירה לכל טאב וגם תמונה וכל זה דורש גם קוד וגם XAML אז רציתי להכניס הכל לתוך שני קבצים מחוברים כלומר אחד XAML שיכיל את כל הסטולים והטפלטים והשני שיכיל את כל הקוד וכך אוכל לקחת את זה לכל תוכנית ולהשתמש כפקד.
מה הדרך הנכונה?
פורסם במקור בפורום CODE613 ב05/01/2014 15:46 (+02:00)
עשיתי פקד כזה:
<TabControl x:Class="myTab"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
</Grid>
</TabControl>
הקוד שלו נראה בדיוק כך:
Public Class myTab
Inherits TabControl
End Class
הוספתי אותו לחלון:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="242" Width="401" xmlns:my="clr-namespace:WpfApplication1">
<Grid>
<my:myTab Height="100" HorizontalAlignment="Left" Margin="10,10,0,0" x:Name="MyTab1" VerticalAlignment="Top" Width="200">
<TabItem Header="TabItem1" Name="TabItem1">
<Grid />
</TabItem>
</my:myTab>
</Grid>
</Window>
אבל כאשר באתי להריץ קיבלתי הודעה כזו:
Error 1 Cannot set Name attribute value 'TabItem1' on element 'TabItem'. 'TabItem' is under the scope of element 'myTab', which already had a name registered when it was defined in another scope. Line 7 Position 40.
איפה הטעות?
פורסם במקור בפורום CODE613 ב05/01/2014 14:28 (+02:00)
אולי קומבו זה טוב, אבל אני רוצה לעשות כמו ב VS שיש בצד ימין חץ קטן שמוציא תפריט ובכל שורה יש גם אייקון קטן ולזה מתאים תפריט.
@דוד ל.ט.
אתה צריך לאגד את כל האייטם ולהציב דטה טמפלט שימשוך את הHeader.
מה הכוונה? אולי יש דוגמא?
תודה רבה.
פורסם במקור בפורום CODE613 ב05/01/2014 14:27 (+02:00)
תודה רבה,
באמת לא שמתי לב שבעצם אני מגיש לבינדינג אוסף חדש.
@דוד ל.ט.
- אתה לא צריך שום קונוורטר, כי אתה יכול לקחת ישר את הHeader של כל טאב, בדיוק כמו הטאב עצמם.
זה מה שעשיתי בהתחלה, אבל אז בארוע לחיצה על שורה בתפריט לא יכולתי לדעת באיזו שורה מדובר, כלומר לא יכולתי להגיע לאינדקס של השורה, ולכן הכנסתי לתפריט אוסף של 'שורות תפריט' ולא סתם אוסף של מחרוזות.
@דוד ל.ט.
- אתה לא צריך אירוע לחיצה על פריט, אלא בינדינג בין האינדקס הנבחר של הקומבו לבין האינדקס הנבחר של הTabControl.
אבל אין פה קומבו אלא תפריט עם שורות?
פורסם במקור בפורום CODE613 ב05/01/2014 13:38 (+02:00)
עשיתי תפריט שה MenuItems שלו באים מה טאב-איטמס של טאב-קונטרול על ידי בינדינג וקונוורטר, ובאמת כל הטאב-איטמס שנוצרים בהתחלה מופיעים כנגדם MenuItems בתפריט, אבל אם אני מוסיף או מוחק טאב-אייטם אחד זה לא מתעדכן דרך הבינדינג ובתפריט כלום לא זז, מדוע הבינדיג לא מעדכן?
<Menu Name="Menu1" VerticalAlignment="Stretch" Grid.Column="1"
VerticalContentAlignment="Center" >
<Menu.Resources>
<my:TabItemsConverter x:Key="TabItemsConverter1" />
</Menu.Resources>
<MenuItem Click="MenuItem1_Click"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType=TabControl, AncestorLevel=1}, Path=Items,
Converter={StaticResource TabItemsConverter1}}"
Name="MenuItem1" VerticalAlignment="Stretch"
VerticalContentAlignment="Stretch"
HorizontalAlignment="Center"
HorizontalContentAlignment="Center">
</MenuItem>
</Menu>
פורסם במקור בפורום CODE613 ב03/01/2014 08:54 (+02:00)
ראיתי כמה וכמה סוגים של קומבו ברשת שמציגים רשימה עם אפשרות בחירה מרובה, אבל כולם נראו לי מוסורבלים מידי, אחד לקח קומבו רגיל ועשה לו טמפלט, אחר לקח בכלל לחצן דו מצבי שבלחיצה עליו קופץ Popup ושבתוכנו הרשימה אבל גם הוא סיבך את זה עם המון מסמכי קוד.
יש דרך לעשות משהו פשוט? אני חושב שלקחת לחצן דו מצבי ולהוסיף לו Popup זה רעיון די טוב רק צריך לזה צורה פשוטה הנה התחלתי כך:
<ToggleButton Margin="193,41,12,96" HorizontalContentAlignment="Right">
<Path x:Name="Arrow"
Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Data="M 0 0 L 4 4 L 8 0 Z" Fill="#FF3C2B2B" Margin="4"></Path>
</ToggleButton>
<Popup Margin="193,71,12,18"></Popup>
איך ממשיכים ?
תודה לכולם.
פורסם במקור בפורום CODE613 ב02/01/2014 15:48 (+02:00)
עוד סיבה טובה לא להשתמש באקסס אלא בדוטנט היא נושא האבטחה של התוכנה מפריצה והעתקה, יעויין כאן.
פורסם במקור בפורום CODE613 ב19/01/2014 10:46 (+02:00)
ארכיטקט,
כתבת מצד אחד חסרונות גדולים באקסס
@ארכיטקט
למה כל אופיס תקועה עדיין עם vb6???
ומצד שני שיבחת את אקסס
@ארכיטקט
זה לא שלא ניסיתי, ניסיתי 2 פרוייקטים לעשות בדוט נט, אחד לקח 4 חודשים והשני חודש, כשנשברתי, החלטתי שאני עושה הכל באקסס עם odbc כמובן, ותנחשו, מה שלקח חודש ולא הגעתי לרבע מהדרך, לקח לי באקסס שלושה ימים לסיים!!!!! ומה שלקח 4 חודשים ולא הגעתי ל 10 אחוז, כבר עכשיו אני קרוב לחצי עבודה אחרי שבועיים שלושה.
עוד שאלה מה בדיוק עיכב אותך כל כך בדוטנט שמצאת לו פתרון כל כך מהיר באקסס ?
פורסם במקור בפורום CODE613 ב01/01/2014 15:24 (+02:00)
קחו למשל דבר פשוט, קריאה לפונקציה באמצעות מחרוזת, כמה קל ופשוט ב vb6 יש פקודה שנקראת run וזהו. אבל בדוט נט, כשרציתי לעשות דבר כזה, ישבתי שבוע לשבור את השיניים עם חמש מחלקות שצריך להפעיל בשביל דבר כל כך פשוט, אז למה הם ביטלו את זה? למה לא עשו פקודה של run וזהו?????
אין קל מזה:
Dim Method As MethodInfo = Me.GetType.GetMethod("שם הפונקציה")
Method.Invoke(Me, Nothing)
אם אתה רוצה אפשר לקורא לפונקציה עם פרמטרים עיין כאן.
פורסם במקור בפורום CODE613 ב01/01/2014 18:54 (+02:00)
ואל תשכחו את האשכול הזה .....
פורסם במקור בפורום CODE613 ב05/01/2014 15:41 (+02:00)
א. אני עבדתי כי אני בתחילת הדרך שלי ב WPF, אחרי שעבדתי פעם אחת לעולם שוב לא אצטרך לעבוד על נקודה זו כי היא כבר ברורה לי ואני מיישם אותה בכל מקום ואני כבר משתמש בזה באופן הטבעי ביותר.
ב. למה לזנוח את דרך הישנה: להלן חלק מהסיבות:
כי סביבת העבודה שם מאוד מיושנת ולא נוחה, אין שם סידור אוטומטי של שורות הקוד כמו שצריך עם ההזחות וצריך לעשות את זה ידני, או עם תוסף ל VBE וכמו שהוצרכתי לעשות בעצמי.
אין בסביבת העבודה אפשרות של RenameSymbol אלא רק חיפוש והחלפה וזה גורם להמון שגיאות.
אין אפשרות של Find Symbol ושוב משתמשים עם חיפוש ושוב זה לא נותן תמונה ברורה
אין כלים לניתוח הקוד ודוח שגיאות ועוד המון המון דברים שויזואל סטודיו נותן כל זה פוגע גם בזמן התיכנות וגם הזמן התחזוקה של התוכנה וגם בניפוי שגיאות ומניעתם מראש.
שפת התיכנות VBA רחוקה מאוד מ VBNET שיש בה OOP ותמיד נמצאת בפיתוח, אין העמסות פונקציות ב VBA אין שיכתובים של פונקציות שפה ממש בסיסית ומסכנה, ולא כמו C שאף שהשפה עצמה דלה יש בה הכל בזכות הספריות העצומות שיש לה, כי VBA אי אפשר לעשות ספריות ולהגיע איתם לאיזה יכולות חדשות כמו ב C. גם שפה זו מזמן לא מתפתחת כלל לאומת C++ שאף שהשפה נשארה אבל המעלה שלה היא שהכל אפשר לפתח דרך הספריות ואין צורך לשנות בשפה עצמה, אבל בשפות העליות המודרניות אין דרך כזו.
לקוח שמזמין תוכנה בדרך כלל לא רוצה רק ניהול נתונים אלא רוצה שתוכנה תעשה לו על הדרך עוד כמה דברים במשרד שלו ותקל עליו בעוד כמה תחומים שאקסס ממש לא מיועד להם, ואז צריך לעשות שמיניות באויר כדי לעשות לו את זה.
מי שמפתח באקסס תמיד צריך שאצל הלקוח יהיה מותקן האקסס, והבעיה היא שכל פעם יוצאת גירסה חדשה והלקוח רוצה להתקין אופיס חדש ואז אופס, התוכנה לא עובדת לו, כי שינו שם כמה דברים בגירסה החדשה, אבל בדוט נט אתה כותב בשביל פרימוורק 4 או 4.5 אם צריך, הלקוח מתקין את זה פעם אחת וזהו גם אם יצאו גירסאות חדשות זה לא מבטל את הישן, וגם כמעט אין סיבה שהלקוח יתקין את החדש, אבל באופיס תמיד הוא ירצה להתקין חדש יותר.
וכבר שמעתי על איזו תוכנה לניהול מוסדות שבתהליך ההתקנה מתקינה אקסס 2000 או 2003 כי בלא זה היא לא יכולה לעבוד ועל הדרך משתבשים ללקוח כמה דברים במחשב שלו.
כשמגיעים לנושא של 32 ביט ו64 ביט יש הרבה בעיות שיכולות לצוץ עם אקסס כאשר בדוט נט הכל מתחת לפני השטח ואתה לא צריך לחשוב על זה כלל.
וכו...
פורסם במקור בפורום CODE613 ב02/01/2014 00:20 (+02:00)
- בעייה נוספת זה השדות המחושבים. (חסיד WPF: עכשיו לחשוב בראש שלך: "מה הוא מקשקש, ברור שבWPF אפשר לעשות שדה מחושב עם ביינדיג נכון" - אתה צודק) שבאקסס פשוט תענוג, ובדוטנט? טוב, אני לא רוצה לעשות לכם רע, בואו נדלג.
פשוט וקל כבר דובר על כך בפורומנו הקטן כאן.
פורסם במקור בפורום CODE613 ב01/01/2014 19:06 (+02:00)
בנתיים עברתי על הקישור שהבאתי למעלה וזה מה שיצא, לא כל כך יפה, אשמח לקבל שיפוצים ורעיונות נוספים:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
x:Class="WpfApplication2.TabWindow"
x:Name="Window"
Title="TabWindow"
Width="432" Height="152">
<Window.Resources>
<ControlTemplate x:Key="ScrollViewerTemplate" TargetType="{x:Type ScrollViewer}">
<Grid x:Name="Grid" Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle x:Name="Corner"
Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Column="1" Grid.Row="1"/>
<ScrollBar x:Name="PART_HorizontalScrollBar"
Cursor="Arrow"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
Grid.Column="0" Grid.Row="0"
Orientation="Horizontal"
ViewportSize="{TemplateBinding ViewportWidth}"
Maximum="{TemplateBinding ScrollableWidth}"
Minimum="0"
Height="12"
Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
AutomationProperties.AutomationId="HorizontalScrollBar"/>
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
Margin="12,2,12,0" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Grid.Column="0" Grid.Row="0"
CanContentScroll="{TemplateBinding CanContentScroll}"
CanHorizontallyScroll="False" CanVerticallyScroll="False"/>
</Grid>
</ControlTemplate>
<Style TargetType="TabControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabControl">
<Grid ClipToBounds="True" SnapsToDevicePixels="True" KeyboardNavigation.TabNavigation="Local">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="ColumnDefinition0"/>
<ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition x:Name="RowDefinition0" Height="Auto"/>
<RowDefinition x:Name="RowDefinition1" Height="*"/>
</Grid.RowDefinitions>
<ScrollViewer VerticalScrollBarVisibility="Disabled"
Template="{StaticResource ResourceKey=ScrollViewerTemplate }"
HorizontalScrollBarVisibility="Auto">
<TabPanel x:Name="HeaderPanel"
Margin="2,2,2,0" IsItemsHost="True"
Panel.ZIndex="1" Grid.Column="0"
Grid.Row="0" KeyboardNavigation.TabIndex="1"/>
</ScrollViewer>
<Border x:Name="ContentPanel"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Grid.Column="0" Grid.Row="1"
KeyboardNavigation.DirectionalNavigation="Contained"
KeyboardNavigation.TabIndex="2"
KeyboardNavigation.TabNavigation="Local">
<!--<ContentPresenter x:Name="PART_SelectedContentHost" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Content="{TemplateBinding SelectedContent}" ContentSource="SelectedContent" ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" ContentTemplate="{TemplateBinding SelectedContentTemplate}"/>-->
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<LinearGradientBrush x:Key="LightBrush" StartPoint="0,0" EndPoint="0,1">
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#FFFFF9E8" Offset="0" />
<GradientStop Color="#FFFFF9E8" Offset="1" />
<GradientStop Color="#FFFFE8A6" Offset="0.5" />
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem" >
<Border x:Name="brdr" Margin="0" Padding="2,0"
BorderThickness="1,1,1,0" CornerRadius="4,4,0,0"
BorderBrush="#FF304261">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFF" Offset="0.0"/>
<GradientStop Color="#EEE" Offset="1.0"/>
</LinearGradientBrush>
</Border.Background>
<StackPanel Orientation="Horizontal" >
<Image x:Name="Img" Source="{TemplateBinding Tag}" Margin="3"
Width="20" Height="20"></Image>
<TextBlock Text="{TemplateBinding Header}"
VerticalAlignment="Center" HorizontalAlignment="Center"
TextAlignment="Center" Margin="5" />
<Path Data="M 0,0 L 8,8 M 0,8 L 8,0" x:Name="btn"
Height="8" Margin="3,3,7,3" Visibility="Hidden"
Stroke="Gray"
StrokeThickness="2"
Width="8"
/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" >
<Setter TargetName="btn" Property="Visibility" Value="Visible" />
<Setter TargetName="brdr" Property="Background" Value="#FFFFF9E8" />
</Trigger>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Panel.ZIndex" Value="100" />
<Setter TargetName="brdr" Property="Background"
Value="{StaticResource LightBrush}" />
<Setter TargetName="brdr" Property="Margin"
Value="-4,-2,-4,0" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<TabControl SelectedIndex="3">
<TabItem Header="TabItem">
<Grid/>
</TabItem>
<TabItem Header="TabItem">
<Grid/>
</TabItem>
<TabItem Header="TabItem">
<Grid/>
</TabItem>
<TabItem Header="TabItem">
<Grid/>
</TabItem>
</TabControl>
</Grid>
</Window>
פורסם במקור בפורום CODE613 ב02/01/2014 20:16 (+02:00)
@דוד ל.ט.
אם יש לך נגיד טאב קונטרול שכל טאב אמור להכיל כרטסת לקוח.
אתה יכול להגדיר DataTemplate למראה של הטאב, ולקבוע כItemsSource רשימת לקוחות.
אה, הבנתי, אתה מתכוון שהטאבים בטאב-קונטרול יווצרו אוטומטית ע''פ רשימת הלקוחות וכל טאב-איטם יציג פרטי לקוח אחד.
לארכיטקט תודה, הגשתי בקשה לנתיב לפתיחת הקישור.
פורסם במקור בפורום CODE613 ב02/01/2014 17:49 (+02:00)
אחרי זה מצאתי פה משהו אני הולך לבדוק אותו בע''ה.
פורסם במקור בפורום CODE613 ב02/01/2014 16:20 (+02:00)