Budowa aplikacji w technologii.net wykład 7 konwersja, walidacja, szablony, widoki

Wielkość: px
Rozpocząć pokaz od strony:

Download "Budowa aplikacji w technologii.net wykład 7 konwersja, walidacja, szablony, widoki"

Transkrypt

1 Budowa aplikacji w technologii.net wykład 7 konwersja, walidacja, szablony, widoki 1/85 <Window... Title="Księgarnia"> <Grid>... <ListBox Name="lista" DisplayMemberPath="Title"/> <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center"/> <Grid Grid.Column="2" DataContext="Binding ElementName=lista, Path=SelectedItem" >... <Label...>Tytuł:</Label> <TextBox... Text="Binding Path=Title" /> <Label...>Autor:</Label> <TextBox... Text="Binding Path=Author"/> <Label...>Cena:</Label> <TextBox... Text="Binding Path=Price"/> </Grid> </Grid> </Window>

2 2/85 public class Book public string Title get; set; public string Author get; set; public decimal Price get; set; public Book(string title, string author, decimal price) Title = title; Author = author; Price = price; List<Book> lst = new List<Book>(); lst.add(new Book("Lód", "Jacek Dukaj", 57.99M)); lst.add(new Book("Inne pieśni", "Jacek Dukaj", 48.50M));... lista.itemssource = lst;

3 3/85

4 4/85 Konwersja danych Odpowiada za konwertowanie źródłowych danych, zanim zostaną wyświetlone (np. z niskopoziomowej reprezentacji w postać czytelną dla użytkownika) oraz konwersję nowych wartości, nim zostaną zapamiętane. Używana jest do: formatowania danych (np. konwersja liczby na string), tworzenia obiektów WPF (np. przy wyświetlaniu obrazków), warunkowej modyfikacji pewnych własności elementów interfejsu.

5 Value Converter [ValueConversion(typeof(decimal), typeof(string))] public class PriceConverter : IValueConverter public object Convert(object value, Type targettype, object parameter, CultureInfo culture) decimal price = (decimal)value; return price.tostring("c", culture); public object ConvertBack(object value, Type targettype, object parameter, CultureInfo culture) string price = value.tostring(); decimal result; if (Decimal.TryParse(price, NumberStyles.Any, culture, out result)) return result; return value; 5/85

6 6/85 Value Converter Ustawienia języka: <Window... xmlns:local="clr-namespace:wpfapp1" Language="pl-PL"> Wybór konwertera: <Label Grid.Row="2" Margin="3">Cena:</Label> <TextBox Grid.Column="1" Grid.Row="2" Margin="3"> <TextBox.Text> <Binding Path="Price"> <Binding.Converter> <local:priceconverter/> </Binding.Converter> </Binding> </TextBox.Text> </TextBox>

7 7/85 Value Converter Konwerter w zasobach: <Window.Resources> <local:priceconverter x:key="priceconverter" /> </Window.Resources> Korzystanie: <TextBox Grid.Column="1" Grid.Row="2" Margin="3" Text="Binding Path=Price, Converter=StaticResource PriceConverter"/>

8 Value Converter 8/85

9 9/85 Tworzenie obiektów z Value Converterem Baza danych może przechowywać dane binarne reprezentujące obraz produktu. Konwerter pozwala skonwertować tablicę bajtów na obiekt klasy BitmapImage: tworzymy obiekt BitmapImage, odczytujemy dane obrazka w MemoryStream, wywołujemy BitmapImage.BeginInit(), ustawiamy własność StreamSource na nasz MemoryStream, wywołujemy EndInit() aby zakończyć ładowanie obrazka. Prostszy przykład: pole ImagePath przechowuje ścieżkę, a obrazki są zapisane na dysku.

10 Tworzenie obiektów z Value Converterem public class ImagePathConverter : IValueConverter private string imagedirectory = Directory.GetCurrentDirectory(); public string ImageDirectory get return imagedirectory; set imagedirectory = value; public object Convert(...) string imagepath = System.IO.Path.Combine(ImageDirectory, (string)value); return new BitmapImage(new Uri(imagePath)); public object ConvertBack(...) throw new NotSupportedException(); obrazek można odczytać też ze zdalnej lokacji: return new BitmapImage(new Uri( (string)value, UriKind.Absolute)); 10/85

11 11/85 Tworzenie obiektów z Value Converterem Wykorzystanie: <Window.Resources> <local:imagepathconverter x:key="imagepathconverter" /> </Window.Resources> <Image Margin="3" Grid.Row="3" Grid.Column="1" Stretch="Uniform" HorizontalAlignment="Center" Source="Binding Path=ImagePath, Converter=StaticResource ImagePathConverter"> W wypadku braku obrazka możemy łapać wyjątek w metodzie Convert() i np. zwracać Binding.DoNothing lub jakiś obrazek domyślny.

12 Tworzenie obiektów z Value Converterem 12/85

13 13/85 Formatowanie warunkowe public class PriceToBackgroundConverter : IValueConverter public decimal MaximumPriceToHighlight get; set; public Brush HighlightBrush get; set; public Brush DefaultBrush get; set; public object Convert(...) decimal price = (decimal)value; if (price <= MaximumPriceToHighlight) return HighlightBrush; else return DefaultBrush; public object ConvertBack(...) throw new NotSupportedException();

14 14/85 Formatowanie warunkowe <Window.Resources>... <local:pricetobackgroundconverter x:key="pricetobackgroundconverter" DefaultBrush="x:Null" HighlightBrush="GreenYellow" MaximumPriceToHighlight="29.99"/> </Window.Resources> <Grid DataContext="Binding ElementName=lista, Path=SelectedItem" Grid.Column="2" Background="Binding Path=Price, Converter=StaticResource PriceToBackgroundConverter">... </Grid>

15 Formatowanie warunkowe 15/85

16 16/85 MultiConverter Pozwala kilka własności skonwertować na jedną wartość. <Window.Resources> <local:pricevatconverter x:key="pricevatconverter" /> </Window.Resources> <TextBox Grid.Column="1" Grid.Row="2" Margin="3"> <TextBox.Text> <MultiBinding Converter="StaticResource PriceVatConverter"> <Binding Path="Price"></Binding> <Binding Path="VAT"></Binding> </MultiBinding> </TextBox.Text> </TextBox>

17 17/85 MultiConverter Wartości w tablicy values są w tej samej kolejności, co Bindingi w definicji w XAMLu. public class PriceVatConverter : IMultiValueConverter public object Convert(object[] values,...) try decimal price = (decimal)values[0]; decimal vat = (decimal)values[1]; return (price * (1 + vat)).tostring("c", culture); catch return Binding.DoNothing; public object[] ConvertBack(object value, Type[] t,...) throw new NotSupportedException();

18 MultiConverter 18/85

19 19/85 Walidacja Pozwala kontrolować poprawność danych przy przesyłaniu ich z elementu docelowego do źródła. Rzucanie wyjątku: private decimal price; public decimal Price get return price; set if (value <= 0) throw new ArgumentException( "Cena musi być większa od 0."); price = value;

20 20/85 Walidacja Wyjątki wiązania danych są ignorowane, dlatego potrzebujemy jeszcze reguły walidacji: <TextBox Grid.Column="1" Grid.Row="2" Margin="3"> <TextBox.Text> <Binding Path="Price"> <Binding.Converter> <StaticResource ResourceKey="PriceConverter"/> </Binding.Converter> <Binding.ValidationRules> <ExceptionValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>

21 Walidacja 21/85

22 22/85 Walidacja W wypadku nieudanej walidacji WPF: ustawia własność dołączoną Validation.HasError na true, tworzy ValidationError zawierający szczegóły błędu, jeśli ustawiono Binding.NotifyOnValidationError na true, podnosi zdarzenie Validation.Error. Zmienia się również wygląd kontrolki (wykorzystanie szablonu Validation.ErrorTemplate).

23 23/85 Walidacja Niekiedy nie chcemy rzucać wyjątków przy każdym błędzie użytkownika: public class Book : IDataErrorInfo... private decimal price; public decimal Price get return price; set price = value;

24 24/85 Walidacja public class Book : IDataErrorInfo... public string this[string columnname] get if (columnname == "Price") if (price <= 0) return "Cena musi być większa od 0."; return null; public string Error get return null;

25 25/85 Walidacja Inny przykład: public string this[string columnname] get if (propertyname == "Code") bool valid = true; foreach (char c in Code) if (!Char.IsLetterOrDigit(c)) valid = false; break; if (!valid) return "Może zawierać tylko cyfry i litery."; return null;

26 26/85 Walidacja <TextBox Grid.Column="1" Grid.Row="2" Margin="3"> <TextBox.Text> <Binding Path="Price"> <Binding.Converter> <StaticResource ResourceKey="PriceConverter"/> </Binding.Converter> <Binding.ValidationRules> <DataErrorValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> Możliwe jest łączenie obu podejść. Możemy skorzystać ze skrótu zamiast dodawać ExceptionValidationRule i DataErrorValidationRule, ustawiamy na true: Binding.ValidatesOnExceptions Binding.ValidatesOnDataErrors

27 Walidacja 27/85

28 28/85 Walidacja Własne reguły walidacji. public class PositivePriceRule : ValidationRule private decimal min = 0; private decimal max = Decimal.MaxValue; public decimal Min get return min; set min = value; public decimal Max get return max; set max = value;

29 29/85 Walidacja public class PositivePriceRule : ValidationRule... public override ValidationResult Validate(object value, CultureInfo culture) decimal price = 0; try if (((string)value).length > 0) price = Decimal.Parse((string)value, NumberStyles.Any, culture); catch return new ValidationResult(false, "Illegal characters.");

30 30/85 Walidacja... if ((price < Min) (price > Max)) return new ValidationResult(false, "Not in the range " + Min + " to " + Max + "."); else return new ValidationResult(true, null);

31 31/85 Walidacja <TextBox Grid.Column="1" Grid.Row="2" Margin="3"> <TextBox.Text> <Binding Path="Price"> <Binding.Converter> <StaticResource ResourceKey="PriceConverter"/> </Binding.Converter> <Binding.ValidationRules> <local:positivepricerule Min="0.01" Max="999.99" /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> Uwaga: możemy dodać dowolną liczbę reguł walidacji.

32 Walidacja 32/85

33 33/85 Walidacja Reakcja na błędy walidacji: flaga NotifyOnValidationError: <Binding Path="Price" NotifyOnValidationError="True">... </Binding> zdarzenie: <Grid Validation.Error="validationError"> obsługa: private void validationerror(object sender,...) if (e.action == ValidationErrorEventAction.Added) MessageBox.Show(e.Error.ErrorContent.ToString());

34 Walidacja 34/85

35 35/85 Walidacja Lista błędów walidacji: private void cmdok_click(object sender, RoutedEventArgs e) string message; if (FormHasErrors(out message)) // Errors still exist. MessageBox.Show(message); else //...

36 36/85 Walidacja private bool FormHasErrors(out string message) StringBuilder sb = new StringBuilder(); GetErrors(sb, gridproductdetails); message = sb.tostring(); return message!= "";

37 Walidacja private void GetErrors(StringBuilder sb, DependencyObject obj) foreach (object child in LogicalTreeHelper.GetChildren(obj)) TextBox element = child as TextBox; if (element == null) continue; if (Validation.GetHasError(element)) sb.append(element.text + " has errors:\r\n"); foreach (ValidationError error in Validation.GetErrors(element)) sb.append(" " + error.errorcontent.tostring()); sb.append("\r\n"); // sprawdź dzieci GetErrors(sb, element); 37/85

38 38/85 Walidacja Własne style powiadomienia: <TextBox Grid.Column="1" Grid.Row="2" Margin="3,3,20,3"> <Validation.ErrorTemplate> <ControlTemplate> <DockPanel LastChildFill="True"> <TextBlock DockPanel.Dock="Right" Foreground="Red" FontSize="14" FontWeight="Bold">*</TextBlock> <Border BorderBrush="Green" BorderThickness="1"> <AdornedElementPlaceholder /> </Border> </DockPanel> </ControlTemplate> </Validation.ErrorTemplate> <TextBox.Text>... </TextBox.Text> </TextBox>

39 Walidacja 39/85

40 40/85 Walidacja <TextBlock... ToolTip="Binding ElementName=adornerPlaceholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent">*</TextBlock>... <AdornedElementPlaceholder Name="adornerPlaceholder" />

41 41/85 Szablony danych Fragment kodu XAMLa, który mówi w jaki sposób ma być wyświetlany dowiązany obiekt danych: kontrolki zawartości obsługują to poprzez własność ContentTemplate kontrolki list poprzez ItemTemplate (stosowane do każdego obiektu kolekcji) Pozwala zastąpić to: <ListBox Name="lista" Margin="5" DisplayMemberPath="Title"/> Tym: <ListBox Name="lista" Margin="5"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="Binding Path=Title"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

42 Szablony danych 42/85

43 43/85 Szablony danych <ListBox Name="lista" Margin="5" HorizontalContentAlignment="Stretch"> <ListBox.ItemTemplate> <DataTemplate> <Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="4"> <Grid Margin="3"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBlock FontWeight="Bold" Text="Binding Path=Title"></TextBlock> <TextBlock Grid.Row="1" Text="Binding Path=Author"></TextBlock> </Grid> </Border> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

44 Szablony danych 44/85

45 45/85 Szablony danych Umieszczanie szablonów w zasobach: <Window.Resources>... <DataTemplate x:key="bookdatatemplate"> <Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="4"> <Grid Margin="3"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBlock FontWeight="Bold" Text="Binding Path=Title"></TextBlock> <TextBlock Grid.Row="1" Text="Binding Path=Author"></TextBlock> </Grid> </Border> </DataTemplate> </Window.Resources>

46 46/85 Szablony danych Korzystanie z szablonów umieszczonych w zasobach: <ListBox Name="lista" Margin="5" HorizontalContentAlignment="Stretch" ItemTemplate="StaticResource BookDataTemplate"/>

47 Szablony danych <DataTemplate x:key="bookdatatemplate"> <Border...> <Grid Margin="3"> <Grid.RowDefinitions> <RowDefinition/><RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" SharedSizeGroup="ikona"></ColumnDefinition> <ColumnDefinition ></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Grid.Column="1" FontWeight="Bold" Text="Binding Path=Title"></TextBlock> <TextBlock Grid.Column="1" Grid.Row="1" Text="Binding Path=Author"></TextBlock> <Image Grid.RowSpan="2" MaxHeight="64" Source="Binding Path=ImagePath, Converter=StaticResource ImagePathConverter"> </Image> </Grid> </Border> </DataTemplate> 47/85

48 48/85... <Grid Name="gridProductDetails" Grid.IsSharedSizeScope="True"> <ListBox Name="lista" Margin="5" HorizontalContentAlignment="Stretch" ItemTemplate="StaticResource BookDataTemplate"/>

49 Szablony danych 49/85

50 50/85 Szablony danych <DataTemplate x:key="bookdatatemplate">... <Button Click="cmdDoKoszyka" Tag="Binding Path=ProductID">Do koszyka...</button> </DataTemplate> private void cmddokoszyka(object sender, RoutedEventArgs e) Button cmd = (Button)sender; int productid = (int)cmd.tag; //...

51 51/85 Szablony danych Inne rozwiązanie: <DataTemplate x:key="bookdatatemplate">... <Button Click="cmdDoKoszyka" Tag="Binding"> Do koszyka...</button> </DataTemplate> private void cmddokoszyka(object sender, RoutedEventArgs e) Button cmd = (Button)sender; Book book = (Book)cmd.Tag; lista.selecteditem = book; //...

52 Szablony danych 52/85

53 53/85 Szablony danych Różnicowanie szablonów danych: <DataTemplate x:key="bookdatatemplate"> <Border... Background="Binding Path=Price, Converter=StaticResource PriceToBackgroundConverter">... </Border> </DataTemplate>

54 Szablony danych 54/85

55 Szablony danych Wybór szablonów: public class BookTemplateSelector : DataTemplateSelector public override DataTemplate SelectTemplate(object item, DependencyObject container) Book product = (Book)item; Window window = Application.Current.MainWindow; if (product.categoryname == "Horror") return (DataTemplate)window.FindResource("HorrorBookTemplate"); else return (DataTemplate)window.FindResource("DefaultBookTemplate"); 55/85

56 56/85 Szablony danych <Window.Resources> <DataTemplate x:key="defaultbooktemplate">... </DataTemplate> <DataTemplate x:key="horrorbooktemplate"> <Border Margin="5" BorderThickness="2" BorderBrush="Red" CornerRadius="4" Background="Black" TextBlock.Foreground="White">... </Border> </DataTemplate> </Window.Resources> <ListBox Name="lista" Margin="5" HorizontalContentAlignment="Stretch"> <ListBox.ItemTemplateSelector> <local:booktemplateselector/> </ListBox.ItemTemplateSelector> </ListBox>

57 Szablony danych 57/85

58 58/85 Szablony danych Lepsze (bardziej uniwersalne) rozwiązanie: public class SingleCriteriaHighlightTemplateSelector : DataTemplateSelector public DataTemplate DefaultTemplate get; set; public DataTemplate HighlightTemplate get; set; public string PropertyToEvaluate get; set; public string PropertyValueToHighlight get; set; public override DataTemplate SelectTemplate(object item, DependencyObject container) Product product = (Product)item; Type type = product.gettype(); PropertyInfo property = type.getproperty(propertytoevaluate);

59 59/85 if (property.getvalue(product, null).tostring() == PropertyValueToHighlight) return HighlightTemplate; else return DefaultTemplate;

60 60/85 Szablony danych <ListBox Name="lista" HorizontalContentAlignment="Stretch"> <ListBox.ItemTemplateSelector> <local:singlecriteriahighlighttemplateselector DefaultTemplate="StaticResource DefaultBookTemplate" HighlightTemplate="StaticResource HorrorBookTemplate" PropertyToEvaluate="CategoryName" PropertyValueToHighlight="Horror" > </local:singlecriteriahighlighttemplateselector> </ListBox.ItemTemplateSelector> </ListBox>"> Uwaga: wybór szablonu następuje raz, w momencie tworzenia dowiązania. Jeśli zmiana stanu obiektu może wymagać wyboru innego szablonu, możemy wymusić to ręcznie (np. w PropertyChanged): DataTemplateSelector selector = lista.itemtemplateselector; lista.itemtemplateselector = null; lista.itemtemplateselector = selector;

61 61/85 Zmiana układu listy Możemy zastąpić domyślny kontener listy: <ListBox Name="lista" Margin="5" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> <ListBox.ItemTemplateSelector> <local:booktemplateselector/> </ListBox.ItemTemplateSelector> <ListBox.ItemsPanel> <ItemsPanelTemplate> <WrapPanel></WrapPanel> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox>

62 Zmiana układu listy 62/85

63 63/85 Widoki danych Data Views Widok znajduje się pomiędzy źródłem danych a powiązaną kontrolką. To widok śledzi aktualny element listy, udostępnia sortowanie, filtrowanie, grupowanie. Widok jest typu: BindingListCollectionView jeśli źródło danych jest typu IbindingList, ListCollectionView jeśli źródło nie jest typu IbindingList, ale Ilist CollectionView jeśli nie jest ani IbindingList, ani Ilist, a tylko Ienumerable. Dostęp do widoku: ICollectionView view = CollectionViewSource.GetDefaultView(lista.ItemsSource);

64 64/85 Widoki danych filtrowanie Pozwala pokazać jedynie podzbiór rekordów listy spełniających pewne warunki. ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(lista.ItemsSource); view.filter = FilterBook; public bool FilterBook(Object item) Book product = (Book)item; return (product.price> 100); albo: view.filter = delegate(object item) Book product = (Book)item; return (product.price > 30); ;

65 Widoki danych filtrowanie 65/85

66 Widoki danych filtrowanie public class ProductByPriceFilter public decimal MinimumPrice get; set; public ProductByPriceFilter(decimal minimumprice) MinimumPrice = minimumprice; public bool FilterItem(Object item) Book product = item as Book; if (product!= null) return (product.price > MinimumPrice); return false; 66/85

67 67/85 Widoki danych filtrowanie private void cmdfilter_click(object sender,...) decimal minimumprice; if (Decimal.TryParse(txtMinPrice.Text, out minimumprice)) ListCollectionView view = CollectionViewSource.GetDefaultView(lista.ItemsSource) as ListCollectionView; if (view!= null) ProductByPriceFilter filter = new ProductByPriceFilter(minimumPrice); view.filter = filter.filteritem; Usunięcie filtra: view.filter = null;

68 68/85 Widoki danych filtrowanie Uwaga: nie można łączyć kilku filtrów należy raczej zaprojektować filtr z wieloma warunkami.

69 69/85 Widoki danych sortowanie Sortowanie na podstawie wskazanej własności danych: ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(lista.ItemsSource); view.sortdescriptions.add(new SortDescription("Title", ListSortDirection.Ascending));

70 Widoki danych sortowanie 70/85

71 71/85 Widoki danych sortowanie Własna procedura sortowaniea (tylko dla ListCollectionView). public class SortByNameLength : System.Collections.IComparer public int Compare(object x, object y) Book bookx = (Book)x; Book booky = (Book)y; return bookx.title.length.compareto(booky.title.length); view.customsort = new SortByNameLength();

72 Widoki danych sortowanie 72/85

73 73/85 Widoki danych grupowanie Jest zbliżone do sortowania: view.groupdescriptions.add(new PropertyGroupDescription("Author"));

74 Widoki danych grupowanie 74/85

75 75/85 Widoki danych grupowanie A na czym polega różnica? Czyli: jak rozróżnić grupy? ItemsControl.GroupStyle: ContainerStyle styl dla każdego elementu grupy ContainerStyleSelector HeaderTemplate nagłówek dla grupy HeaderTemplateSelector Panel wybór panelu przechowującego grupę

76 76/85 Widoki danych grupowanie <ListBox...> <ListBox.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <TextBlock Text="Binding Path=Name" FontWeight="Bold" Foreground="White" Background="LightGreen" Margin="0,5,0,0" Padding="3"/> </DataTemplate> </GroupStyle.HeaderTemplate> </GroupStyle> </ListBox.GroupStyle> </ListBox> Uwaga: nie dowiązujemy do obiektu danych, ale do PropertyGroupDescription, stąd własność Name.

77 Widoki danych grupowanie 77/85

78 78/85 Widoki danych grupowanie Grupowanie przedziałami: public class PriceRangeProductGrouper : IValueConverter public int GroupInterval get; set; public object Convert(object value, Type targettype, object parameter, CultureInfo culture) decimal price = (decimal)value;

79 79/85 if (price < GroupInterval) return String.Format(culture, "Mniej niż 0:C", GroupInterval); else int interval = (int)price / GroupInterval; int lowerlimit = interval * GroupInterval; int upperlimit = (interval + 1) * GroupInterval; return String.Format(culture, "0:C 1:C", lowerlimit, upperlimit); public object ConvertBack(...) throw new NotSupportedException( "This converter is for grouping only.");

80 80/85 Widoki danych grupowanie view.sortdescriptions.add(new SortDescription("Price", ListSortDirection.Ascending)); PriceRangeProductGrouper grouper = new PriceRangeProductGrouper(); grouper.groupinterval = 10; view.groupdescriptions.add(new PropertyGroupDescription("Price", grouper));

81 Widoki danych grupowanie 81/85

82 82/85 Widoki danych nawigacja Widok udostępnia metody i własności służące do nawigacji, np. Count, CurrentItem, CurrentPosition, MoveCurrentToFirst(), MoveCurrentToLast(), MoveCurrentToNext(), MoveCurrentToPrevious(), MoveCurrentToPosition(). Można to robić nawet bez listy: <Window...>... <Grid>... <Label...>Tytuł:</Label> <TextBox...Text="Binding Path=Title" /> <Label...>Autor:</Label> <TextBox...Text="Binding Path=Author"/>... <Button Name="cmdPrev"...><</Button> <TextBlock Name="lblPosition".../> <Button Name="cmdNext"...>></Button> </Grid> </Window>

83 83/85 Widoki danych nawigacja W klasie okna zadeklarujmy referencję na widok: private ListCollectionView view; W momencie ładowania okna stwórzmy lub załądujmy listę danych i pobierzmy widok: List<Book> lst = new List<Book>(); lst.add(...);... this.datacontext = lst; view = (ListCollectionView)CollectionViewSource.GetDefaultView(this. DataContext); view.currentchanged += view_currentchanged;

84 84/85 Widoki danych nawigacja private void view_currentchanged(object sender, EventArgs e) lblposition.text = "Pozycja " + (view.currentposition+1).tostring() + " z " + view.count.tostring(); cmdprev.isenabled = view.currentposition > 0; cmdnext.isenabled = view.currentposition < view.count-1; private void cmdprev_click(object sender, RoutedEventArgs e) view.movecurrenttoprevious(); private void cmdnext_click(object sender, RoutedEventArgs e) view.movecurrenttonext();

85 Widoki danych nawigacja 85/85

Programownie w technologii.net wykład 6 Element Binding i Data Binding

Programownie w technologii.net wykład 6 Element Binding i Data Binding Programownie w technologii.net wykład 6 Element Binding i Data Binding 1/41 Element Binding Mechanizm, który pozwala wydobyć pewne informacje z obiektu źródłowego i zapisać je w pewnym obiekcie docelowym.

Bardziej szczegółowo

Rozwój aplikacji modułowych Paweł Brudnicki. Dodanie modułu

Rozwój aplikacji modułowych Paweł Brudnicki. Dodanie modułu Rozwój aplikacji modułowych Paweł Brudnicki Moduł jest podstawową jednostką funkcjonalności. Stanowi on część, która może być niezależnie pisana, testowana a nawet wdrażana. W przewodniku dodamy niezależny

Bardziej szczegółowo

Przewodnik krok po kroku:

Przewodnik krok po kroku: Przewodnik krok po kroku: Aplikacja jest rozbudowywana. Jej podstawą jest: https://msdn.microsoft.com/enus/library/ff921174(v=pandp.40).aspx Do aplikacji dodajemy nowy moduł, który posłuży nam do dodawania

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,

Bardziej szczegółowo

xmlns:prism=http://www.codeplex.com/prism c. <ContentControl prism:regionmanager.regionname="mainregion" />

xmlns:prism=http://www.codeplex.com/prism c. <ContentControl prism:regionmanager.regionname=mainregion /> 1 Tworzenie Shella a. W pierwszej kolejności tworzymy nowy projekt: WPF Application. Name: Shell SolutionName: PrismApp b. Dodajemy bibliotekę PRISM za pomocą NuGet Managera (dla.net Framework 4.5 Prism

Bardziej szczegółowo

MVVM Light Toolkit Przewodnik krok po kroku

MVVM Light Toolkit Przewodnik krok po kroku Julita Borkowska 242817 MVVM Light Toolkit Przewodnik krok po kroku W celu lepszego zrozumienia elementów MVVM Light Toolkit przedstawionych w prezentacji, zostanie poniżej krok po kroku napisany program

Bardziej szczegółowo

Zdarzenia i polecenia

Zdarzenia i polecenia WPF Programowanie w środowisku Windows Wykład 10-1 Zdarzenia i polecenia Wykład 10-2 Zdarzenia Metoda obsługi zdarzenia może być do niego przypisana w kodzie C# lub w XAML

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Programowanie obiektowe i zdarzeniowe wkład 2 klas i obiekt namespace ConsoleApplication1 // współrzędne punktu int, ; Jak zdefiniować w programie punkt? = 3; = 2; Może tak? // wpisanie informacji Console.WriteLine("

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego 1/34 Wymagania wstępne: Znajomość podstaw programowania. Efekty kształcenia: Umiejętność tworzenia prostych aplikacji

Bardziej szczegółowo

Aby nadać jej pożądaną postać należy w pliku Window1.xaml stworzyć definicję swojego stylu modyfikując ręcznie postać zapisu XAML:

Aby nadać jej pożądaną postać należy w pliku Window1.xaml stworzyć definicję swojego stylu modyfikując ręcznie postać zapisu XAML: Lab8 WPF Zad1 : - lista z językami i flagami + wiązanie danych z obiektu przerabiana na ComboBox - fisheye przegląd obrazków lupa (obrazki umieszczone na sztywno) - wyświetlenie galerii zdjęć zapisanej

Bardziej szczegółowo

Instrukcja laboratoryjna cz.3

Instrukcja laboratoryjna cz.3 Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0 I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel:

Bardziej szczegółowo

Instrukcja laboratoryjna cz.4

Instrukcja laboratoryjna cz.4 Programowanie aplikacji internetowych 2015/2016 Instrukcja laboratoryjna cz.4 Aplikacje na Windows 8.x Store (C# i XAML) Prowadzący: Tomasz Goluch Wersja: 1.1 I. Wprowadzenie 1 Cel: Przekazanie podstawowych

Bardziej szczegółowo

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger: Logger Na początku stworzymy własny logger. Do tego calu trzeba utworzyć klasę naszego loggera, która będzie implementować interfejs ILoggerFacade. Oto kod tej klasy: public class SimpleLogger: ILoggerFacade

Bardziej szczegółowo

Rozpoczynając wywód na temat MVVM należy najpierw zadań sobie kilka podstawowych pytań na temat MVVM jako wzorca projektowego :

Rozpoczynając wywód na temat MVVM należy najpierw zadań sobie kilka podstawowych pytań na temat MVVM jako wzorca projektowego : Slajd3 Dlaczego MVVM? Rozpoczynając wywód na temat MVVM należy najpierw zadań sobie kilka podstawowych pytań na temat MVVM jako wzorca projektowego : Czy musisz dzielić projekt z projektantem (grafikiem

Bardziej szczegółowo

Programowanie w technologii.net wykład 4 Aplikacja i okna

Programowanie w technologii.net wykład 4 Aplikacja i okna Programowanie w technologii.net wykład 4 Aplikacja i okna 1/30 Aplikacja Aplikacja WPF jest reprezentowana przez instancję klasy System.Windows.Application. pilnuje ona kiedy program się uruchamia i kończy

Bardziej szczegółowo

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Wykład 12. Programowanie serwera MS SQL 2005 w C# Wykład 12 Programowanie serwera MS SQL 2005 w C# Budowa procedur składowanych w C# Budowa funkcji składowanych w C# Wykorzystanie funkcji składowanych w C# po stronie klienta Tworzenie typów definiowanych

Bardziej szczegółowo

1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika.

1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika. Tematy zajęć: 1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika. 2. Posługiwanie się podstawowymi kontrolkami. 3. Własności i zdarzenia w WPF. 4. Zadania aplikacji. Okna. 5. Polecenia. Zasoby.

Bardziej szczegółowo

Programowanie w technologii.net wykład 8 Style, listy, drzewa, toolbary, menu

Programowanie w technologii.net wykład 8 Style, listy, drzewa, toolbary, menu Programowanie w technologii.net wykład 8 Style, listy, drzewa, toolbary, menu 1/70 Podstawy Chcąc wielokrotnie wykorzystać pewne ustawienia stylu, może zdefiniować je w zasobach:

Bardziej szczegółowo

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska BEAN VALIDATION Waldemar Korłub Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska Bean Validation Uniwersalny mechanizm walidacji danych we wszystkich warstwach aplikacji Warstwa interfejsu,

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

Modele zawartości. WPF wykorzystuje 4 modele zawartości kontrolek: ContentControl pojedyncza zawartość

Modele zawartości. WPF wykorzystuje 4 modele zawartości kontrolek: ContentControl pojedyncza zawartość WPF Programowanie w środowisku Windows Wykład 8-1 Kontrolki Modele zawartości WPF wykorzystuje 4 modele zawartości kontrolek: ContentControl pojedyncza zawartość Wykład 8-2 używane przez: Button, ButtonBase,

Bardziej szczegółowo

Instrukcja laboratoryjna cz.7

Instrukcja laboratoryjna cz.7 Programowanie aplikacji internetowych 2013/2014 Instrukcja laboratoryjna cz.7 Aplikacje na Windows Store Prowadzący: Tomasz Goluch Wersja: 1.1 I. Wprowadzenie 1 Cel: Przekazanie podstawowych informacje

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera

Bardziej szczegółowo

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy - Narzędzie Windows Forms - Przykładowe aplikacje 1 Narzędzia Windows Form Windows Form jest narzędziem do tworzenia aplikacji dla

Bardziej szczegółowo

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) MAS dr. Inż. Mariusz Trzaska Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) Zagadnienia o Podstawy o Kontrolowanie sterowania o Klasy o Interfejsy o Obsługa błędów o Pojemniki o System

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki W językach niskopoziomowych błędy zgłaszane były przez zwracanie odpowiedniego statusu (liczby) W C main() zwraca int żeby można było określić

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7 Instrukcja 7 Laboratoria 9, 10 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

Bardziej szczegółowo

Leszek Stasiak Zastosowanie technologii LINQ w

Leszek Stasiak Zastosowanie technologii LINQ w Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji

Bardziej szczegółowo

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 5 Okna MDI i SDI, dziedziczenie Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie

Bardziej szczegółowo

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal

Bardziej szczegółowo

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły

Bardziej szczegółowo

Laboratorium 10 - Web Services

Laboratorium 10 - Web Services Laboratorium 10 - Web Services W ramach laboratorium zapoznamy się z koncepcją Web Service ów (odmiana point-to-point Web Service). W kolejnych krokach utworzony zostanie projekt, w którym wykorzystana

Bardziej szczegółowo

Programowanie Obiektowe Ćwiczenie 4

Programowanie Obiektowe Ćwiczenie 4 Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)

Bardziej szczegółowo

Informatyka II. Laboratorium Aplikacja okienkowa

Informatyka II. Laboratorium Aplikacja okienkowa Informatyka II Laboratorium Aplikacja okienkowa Założenia Program będzie obliczał obwód oraz pole trójkąta na podstawie podanych zmiennych. Użytkownik będzie poproszony o podanie długości boków trójkąta.

Bardziej szczegółowo

Programowanie telefonów z Windows Phone 7, cz. 4

Programowanie telefonów z Windows Phone 7, cz. 4 Programowanie telefonów z Windows Phone 7, cz. 4 Piotr M. Szczypiński Instytut Elektroniki Politechniki Łódzkiej http://www.eletel.p.lodz.pl/pms/ piotr.szczypinski@p.lodz.pl Budynek B9, II piętro, pokój

Bardziej szczegółowo

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych Jacek Matulewski Materiały dla Podyplomowego Studium Programowania i Zastosowania Komputerów, sekcja Projektowanie i tworzenie aplikacji

Bardziej szczegółowo

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3 3 ASP.NET MVC Podstawy 1 1. Cel zajęć Celem zajęć jest zapoznanie się z podstawami ASP.NET MVC 2.0 Framework. 2. Zadanie Proszę zbudować prostą aplikację WWW przy zastosowaniu framework a ASP.NET MVC 2.0

Bardziej szczegółowo

Laboratorium programowania urządzeń mobilnych

Laboratorium programowania urządzeń mobilnych Laboratorium programowania urządzeń mobilnych Wprowadzenie Hierarcha klas dla aplikacji typu Silverlight tworzonej przez Visual Studio jest następująca: Obsługa ekranu W urządzeniach z Windows Phone 7

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz Walidacja po stronie klienta: - w MVC 3 i 4 domyślnie jest włączona także walidacja po stronie klienta - wykorzystuje ona JavaScript

Bardziej szczegółowo

Instrukcja laboratoryjna nr.4

Instrukcja laboratoryjna nr.4 Języki programowania na platformie.net cz.2 2016/17 Instrukcja laboratoryjna nr.4 Język Visual Basic for.net Prowadzący: Tomasz Goluch Wersja: 3.1 I. Współpraca Visual Basic z C# Cel: Wykorzystanie w kodzie

Bardziej szczegółowo

Lista, Stos, Kolejka, Tablica Asocjacyjna

Lista, Stos, Kolejka, Tablica Asocjacyjna Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,

Bardziej szczegółowo

POLITECHNIKA POZNAŃSKA. Oprogramowanie dla telefonów z systemem Windows Phone 8 obsługujących technologię NFC do sprawdzania listy obecności.

POLITECHNIKA POZNAŃSKA. Oprogramowanie dla telefonów z systemem Windows Phone 8 obsługujących technologię NFC do sprawdzania listy obecności. POLITECHNIKA POZNAŃSKA Oprogramowanie dla telefonów z systemem Windows Phone 8 obsługujących technologię NFC do sprawdzania listy obecności. Programowanie Kart Elektronicznych Systemy Informatyczne w Zarządzaniu

Bardziej szczegółowo

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013 Prowadzący: mgr inż. Tomasz Jaworski Strona WWW: http://tjaworski.kis.p.lodz.pl/ Visual Basic.NET dostęp do bazy danych Baza Microsoft SQL Server Compact

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6 Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

Bardziej szczegółowo

Platformy Programistyczne Podstawy języka Java

Platformy Programistyczne Podstawy języka Java Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo

Bardziej szczegółowo

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Programowanie w środowiskach graficznych. Wykład 3 Język C# Programowanie w środowiskach graficznych Wykład 3 Język C# 1 Zagadnienia 1. Wprowadzenie 2. Przestrzenie nazw 3. Typy, parametry, konwersje 4. Klasy 5. Instrukcje sterujące 6. Właściwości 7. Interfejsy,

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna

Kurs programowania. Wykład 9. Wojciech Macyna Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r.

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r. Bazy danych dla producenta mebli tapicerowanych Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r. Założenia Stworzyć system bazodanowy dla małej firmy produkującej meble tapicerowane. Projekt ma umożliwić

Bardziej szczegółowo

Algorytmy i Struktury Danych. Anna Paszyńska

Algorytmy i Struktury Danych. Anna Paszyńska Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;

Bardziej szczegółowo

Podstawowe kontrolki graficzne. Obsługa plików poprzez kontrolki

Podstawowe kontrolki graficzne. Obsługa plików poprzez kontrolki Podstawowe kontrolki graficzne Obsługa plików poprzez kontrolki Komponent OpenFileDialog Komponent służący do otwierania dowolnych plików. Użytkownik programu wybiera jaki plik, chce odczytać Można nałożyć

Bardziej szczegółowo

Współbieżność w środowisku Java

Współbieżność w środowisku Java Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych

Bardziej szczegółowo

STWORZENIE MOBILNEJ APLIKACJI,

STWORZENIE MOBILNEJ APLIKACJI, LABORATORIUM SYSTEMÓW MOBILNYCH STWORZENIE MOBILNEJ APLIKACJI, WYŚWIETLAJĄCEJ AKTUALNĄ POZYCJĘ UŻYTKOWNIKA, LISTĘ WIDOCZNYCH SATELITÓW ORAZ ICH POZYCJĘ I. Temat ćwiczenia Stworzenie mobilnej aplikacji,

Bardziej szczegółowo

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki Systemy Rozproszone Temat projektu: Regułowy system analizujacy logi Spis treści autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki Cel Projektu...2 Dane aplikacji...2 Technologia...2 Zarządzanie

Bardziej szczegółowo

Programowanie telefonów z Windows Phone 7, cz. 2

Programowanie telefonów z Windows Phone 7, cz. 2 Programowanie telefonów z Windows Phone 7, cz. 2 Piotr M. Szczypiński Instytut Elektroniki Politechniki Łódzkiej http://www.eletel.p.lodz.pl/pms/ piotr.szczypinski@p.lodz.pl Budynek B9, II piętro, pokój

Bardziej szczegółowo

using System;... using System.Threading;

using System;... using System.Threading; Kontekst synchronizacji Wątek w platformie.net może posiadać kontekst synchronizacji reprezentowany przez instancję klasy SynchronizationContext lub jej klasy potomnej. Jeżeli wątek posiada taki kontekst

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 3 Okna i kontrolki

Programowanie obiektowe i zdarzeniowe wykład 3 Okna i kontrolki Programowanie obiektowe i zdarzeniowe wykład 3 Okna i kontrolki

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Problem: Jak zaimplementować stos? Co się stanie gdy dodamy do stosu obiekt typu Czlowiek? Co się stanie, gdy spróbujemy ten obiekt odczytać

Bardziej szczegółowo

Klasy i obiekty cz II

Klasy i obiekty cz II Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy

Bardziej szczegółowo

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Ćwiczenie 1. Kolejki IBM Message Queue (MQ) Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając

Bardziej szczegółowo

Diagram stanów Laboratorium 9

Diagram stanów Laboratorium 9 Diagram stanów Laboratorium 9 Zofia Kruczkiewicz Zofia Kruczkiewicz lab_inp002017_9 1 Modelowanie zachowania obiektu za pomocą diagramu stanów. Opracowanie diagramu stanów dla obiektu wybranej klasy, reprezentującego

Bardziej szczegółowo

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Zastosowanie słuchaczy zdarzeń wg

Zastosowanie słuchaczy zdarzeń wg Zastosowanie słuchaczy zdarzeń wg https://docs.oracle.com/javaee/7/jeett.pdf Technologie internetowe 6 1. Obsługa zdarzeń typu valuechangelistener Rejestracja słuchaczy zdarzeń typu valuechangelistener

Bardziej szczegółowo

Dawid Gierszewski Adam Hanasko

Dawid Gierszewski Adam Hanasko Dawid Gierszewski Adam Hanasko Chcemy stworzyć klasę w której możemy przechowywać dwie zmienne dowolnych typów Tworzymy tyle różnych klas ile potrzeba: Class ParaInt{ int pierwszy; Int drugi; Class ParaButow{

Bardziej szczegółowo

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe. SWING c.d. ZAGADNIENIA: przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe. MATERIAŁY: http://docs.oracle.com/javase/tutorial/uiswing/dnd/ http://th-www.if.uj.edu.pl/zfs/ciesla/

Bardziej szczegółowo

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop. 2016 Spis treści Część I Wzorzec MVVM. Podstawy XAML 7 Rozdział 1. Szybkie wprowadzenie do XAML 9 Wzorzec widoku autonomicznego 9 Tworzenie

Bardziej szczegółowo

Komputerowe systemy na rynkach finansowych. wykład 5. MQL4 - funkcje operujące na obiektach wykresu

Komputerowe systemy na rynkach finansowych. wykład 5. MQL4 - funkcje operujące na obiektach wykresu Komputerowe systemy na rynkach finansowych wykład 5 MQL4 - funkcje operujące na obiektach wykresu ObjectCreate - funkcja tworzy nowy obiekt graficzny, określonego typu oraz nadaje mu nazwę i przyporządkowuje

Bardziej szczegółowo

Inżynieria Programowania Laboratorium 6 Pierwsza finalna wersja. Paweł Paduch paduch@tu.kielce.pl

Inżynieria Programowania Laboratorium 6 Pierwsza finalna wersja. Paweł Paduch paduch@tu.kielce.pl Inżynieria Programowania Laboratorium 6 Pierwsza finalna wersja Paweł Paduch paduch@tu.kielce.pl 25-05-2013 Rozdział 1 Wstęp Dzisiejsze zajęcia będą kontynuacją implementowania interfejsu. Skupimy się

Bardziej szczegółowo

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016 Wykład 6 7 kwietnia 2016 Klasa java.applet.applet Aplety w języku Java Aplety sa specyficznymi programami które moga być wyświetlane w oknach większości przegladarek internetowych. Klasa Applet rozszerza

Bardziej szczegółowo

Wzorce logiki dziedziny

Wzorce logiki dziedziny Wzorce logiki dziedziny 1. Wzorce logiki dziedziny skrypt transakcji (Transaction Script), brama tabeli (Table Data Gateway), model dziedziny (Domain model), strategia (Strategy), moduł tabeli (Table Module),

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych.

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych. 1 2 Kontrolki standardowe WP7 Michał Ręczkowicz, Opublikowano: 2012-02-08 http://msdn.microsoft.com/pl-pl/library/rozpoczecie-pracy-z-windows-phone--kontrolki-standardowe W tym samouczku dowiesz się, jakie

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage). Testowanie II Cel zajęć Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage). Pokrycie kodu testami Jak już była mowa na poprzednich

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki Język C# pętle, sterowanie, wyjątki Język C# pętle Pętle: while ( ) do { while ( ); for ( ; ; ) foreach ( in

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w

Bardziej szczegółowo

Programowanie w środowiskach graficznych. Wykład 4 Język C# cd

Programowanie w środowiskach graficznych. Wykład 4 Język C# cd Programowanie w środowiskach graficznych Wykład 4 Język C# cd 1 Wyjątki Służą do raportowania i obsługi sytuacji wyjątkowych (błędów, które można w jakiś sposób naprawić). Instrukcje, które mogą się z

Bardziej szczegółowo

Metodyki zwinne wytwarzania oprogramowania

Metodyki zwinne wytwarzania oprogramowania Metodyki zwinne wytwarzania oprogramowania Wykład 7 Marcin Młotkowski 23 listopada 2016 Plan wykładu 1 2 3 Kilka negatywnych przykładów Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 2 /

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Laboratorium 8 Diagramy aktywności

Laboratorium 8 Diagramy aktywności Laboratorium 8 Diagramy aktywności Zofia Kruczkiewicz Zofia Kruczkiewicz Lab_INP002017_8 1 Modelowanie zachowania obiektów za pomocą diagramów aktywności. Modelowanie zachowania obiektów za pomocą diagramów

Bardziej szczegółowo

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności

Bardziej szczegółowo

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2 z wykorzystaniem języka Java ME ćwiczenia 2 Wykorzystanie plików graficznych w MIDlet ach utworzenie obiektu klasy Image (statyczna metoda createimage()) utworzenie obiektu klasy ImageItem dodanie utworzonego

Bardziej szczegółowo

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1 1 LINQ 1 1. Cel zajęć Celem zajęć jest zapoznanie się z technologią LINQ oraz tworzeniem trójwarstwowej aplikacji internetowej. 2. Zadanie Proszę przygotować aplikację WWW, która: będzie pozwalała na generowanie

Bardziej szczegółowo

Microsoft IT Academy kurs programowania

Microsoft IT Academy kurs programowania Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego

Bardziej szczegółowo

Wykład 4. Klasa List Kolejki Stosy Słowniki

Wykład 4. Klasa List Kolejki Stosy Słowniki Wykład 4 Klasa List Kolejki Stosy Słowniki Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien

Bardziej szczegółowo

PHP: bloki kodu, tablice, obiekty i formularze

PHP: bloki kodu, tablice, obiekty i formularze 1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują

Bardziej szczegółowo

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz Aplikacja internetowa zbudowana w oparciu o środowisko Visual Web Java Server Faces. Zarządzanie obiektami typu SesionBeans, RequestBeen i ApplicationBeans, Laboratorium 1 Wzorce oprogramowania lab1, Okres

Bardziej szczegółowo

Laboratorium 7 Blog: dodawanie i edycja wpisów

Laboratorium 7 Blog: dodawanie i edycja wpisów Laboratorium 7 Blog: dodawanie i edycja wpisów Dodawanie nowych wpisów Tworzenie formularza Za obsługę formularzy odpowiada klasa Zend_Form. Dla każdego formularza w projekcie tworzymy klasę dziedziczącą

Bardziej szczegółowo

Swing ćwiczenia 2 opis

Swing ćwiczenia 2 opis Swing ćwiczenia 2 opis Zad 1. a) Dołożyliśmy nowy obszar tekstowy JTextArea i w jego właściwości Document ustawiliśmy, że ma wspólny dokument (model-treść) z naszym pierwszym JTextArea. Zauważmy, że wpisując

Bardziej szczegółowo

HttpRequest Aplikacja Czat

HttpRequest Aplikacja Czat HttpRequest Aplikacja Czat Za pomocą obiektu HttpRequest można wykonywać żądania http z aplikacji windows phone. W pierwszej kolejności należy utworzyć aplikację i dodać do niej dwie kontrolki: Buton i

Bardziej szczegółowo

Informatyzacja Przedsiębiorstw

Informatyzacja Przedsiębiorstw Informatyzacja Przedsiębiorstw Microsoft Dynamics NAV 2016 Development Environment C/AL Izabela Szczęch Informatyzacja Przedsiębiorstw Strona 1 Plan zajęć 1 Informacje ogólne dotyczące środowiska deweloperskiego

Bardziej szczegółowo

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Systemy wirtualnej rzeczywistości Laboratorium Komponenty i serwisy Wstęp: W trzeciej części przedstawione zostaną podstawowe techniki

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 4 Marcin Młotkowski 15 marca 2018 Plan wykładu 1 2 3 Klasa podstawowa Własne kolekcje Obiekty i wartości Marcin Młotkowski Programowanie obiektowe 141 / 224 Z czego składa

Bardziej szczegółowo

Kurs programowania 2 - listy

Kurs programowania 2 - listy Kurs programowania 2 - listy Listy rozwijane (ComboBox) Listy rozwijane (rozwijalne) można tworzyć przy użyciu klasy ComboBox. W tabeli poniżej właściwości udostępniane przez tę kontrolkę. Najważniejsza

Bardziej szczegółowo

Backend Administratora

Backend Administratora Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona

Bardziej szczegółowo

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania 1) Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z podstawowymi elementami obiektowymi systemu Windows wykorzystując Visual Studio 2008 takimi jak: przyciski, pola tekstowe, okna pobierania danych

Bardziej szczegółowo