Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Come Risolvere il problema del (Me) ho (Form) che sia Per dare il via libera al mio calendario ad Oggetti
Forum - C# / VB.NET - Come Risolvere il problema del (Me) ho (Form) che sia Per dare il via libera al mio calendario ad Oggetti

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
A.Maury (Normal User)
Newbie


Messaggi: 4
Iscritto: 09/01/2023

Segnala al moderatore
Postato alle 3:50
Lunedì, 09/01/2023
Ciao a tutti da Maurizio
Il mio problema e questo:
Sto' tentando con l'uso di Visual Studio 2022
di creare una sorta di calendario ad oggetti; Come avevo già fatto in passato usando il VBA.

Ora per certi versi : Come formula sembra funzionare
tranne che per il fatto che mi continua a darmi errore in certe parti del listato che non so come risolvere il tutto .
C'é qualcuno di voi che se la sentirebbe gentilmente di darmi una mano in merito Grazie.
Il listato e questo:

Codice sorgente - presumibilmente VB.NET

  1. Option Explicit On
  2. Public Class Form1
  3.     Dim YrNum As Long, MonthNum As Long, DayNum As Long, MonthDays As Integer, StartNum As Integer, EndNum As Integer
  4.     Dim StartDate As Date, SelectedDate As Date, ButtonNum As Integer, DateCounter As Long, CurMonth As Boolean
  5.  
  6.     Private Sub MonthChange_Scroll(sender As Object, e As ScrollEventArgs) Handles MonthChange.Scroll
  7.  
  8.     End Sub
  9.  
  10.     Public Property WorksheetFunction As Object
  11.  
  12.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  13.  
  14.     End Sub
  15.  
  16.     Private Sub Lbl_Giorno_Mese_Click(sender As Object, e As EventArgs)
  17.  
  18.     End Sub
  19.  
  20.     Private Sub Cella1_Click(sender As Object, e As EventArgs) Handles Cella1.Click
  21.         On Error Resume Next
  22.         Me.("Cella" & ButtonNum).ForeColor = &HFF0000
  23.         ButtonNum = 1
  24.         SelectedDate = Cella1.Text & "/" & MonthNum & "/" & YrNum
  25.         SwitchBack()
  26.     End Sub
  27.  
  28.     Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
  29.         On Error Resume Next
  30.         'Foglio1.Range("A5:F5").ClearContents
  31.         Me.Label1.Text = ""
  32.         Me.Label2.Text = ""
  33.         DateCounter = 1
  34.         YrNum = Year(Now())
  35.         DayNum = 1
  36.         Me.MonthChange.Value = Month(Now())
  37.         ButtonNum = 1
  38.         StartDate = DayNum & "/" & MonthNum & "/" & YrNum
  39.         Me.DateLabel.Text = Format(StartDate, "mmm yyyy")
  40.         Me.MonthChange_Change()
  41.     End Sub
  42.  
  43.     Private Sub MonthChange_Change()
  44.         Throw New NotImplementedException()
  45.     End Sub
  46.  
  47.     Private Function GetWorksheetFunction() As Object
  48.         Return WorksheetFunction
  49.     End Function
  50.  
  51.     Private Sub MonthChange_Change(worksheetFunction As Object)
  52.         On Error Resume Next
  53.         If MonthChange.Value = 13 Then
  54.             YrNum = YrNum + 1
  55.             MonthChange.Value = 1
  56.         End If
  57.         If MonthChange.Value = 0 Then
  58.             YrNum = YrNum - 1
  59.             MonthChange.Value = 12
  60.         End If
  61.  
  62.         MonthNum = MonthChange.Value
  63.         StartDate = DayNum & "/" & MonthNum & "/" & YrNum
  64.         Dim worksheetFunction1 As Object = worksheetFunction
  65.  
  66.         StartNum = worksheetFunction1.Weekday(StartDate, 2)
  67.         MonthDays = EoMonth(StartDate, 0) - StartDate + &H1
  68.         DateLabel.Text = Format(StartDate, "mmm yyyy")
  69.         UpDateDisplay()
  70.     End Sub
  71.  
  72.     Private Function EoMonth(startDate As Date, v As Integer) As Date
  73.         Throw New NotImplementedException()
  74.     End Function
  75.  
  76.     Sub UpDateDisplay()
  77.         On Error Resume Next
  78.         Dim X As Integer
  79.  
  80.         If MonthNum = Month(Now()) And YrNum = Year(Now()) Then
  81.             CurMonth = True
  82.         Else
  83.             CurMonth = False
  84.         End If
  85.  
  86.         Me.SelectedDateLabel.Text = ""
  87.         'Reimposta la Visualizzazione Dei Tasti *********************************
  88.         For X = 28 To 38
  89.             Me.("Cella" & X).Visible = True
  90.         Next X
  91.         For X = 1 To StartNum - 1
  92.             Dim form1 As Form1 = Me
  93.             Me.("Cella" & X).Visible = False
  94.         Next X
  95.         Dim WorksheetFunction As Object = Nothing
  96.  
  97.         For X = WorksheetFunction.Weekday(StartDate, 2) To 7
  98.             Me.("Cella" & X).Visible = True
  99.         Next X
  100.  
  101.         'Rietichettare il pulsanti di visualizzazione *******************************
  102.         For X = StartNum To StartNum + MonthDays - 1
  103.             Me.("Cella" & X).Caption = X - StartNum + 1
  104.             If CurMonth = True And X - StartNum + 1 = Day(Now()) Then
  105.                 Me.("Cella" & X).BackColor = &H80FFFF
  106.             Else
  107.                 If ((X - 1) Mod 7) + 1 = 6 Or ((X - 1) Mod 7) + 1 = 7 Then
  108.                     Me.("Cella" & X).ForeColor = 1
  109.                     Me.("Cella" & X).BackColor = &H80FF80
  110.                 Else
  111.                     Me..("Cella" & X).ForeColor = 1
  112.                     Me.("Cella" & X).BackColor = &H8000000F
  113.                 End If
  114.             End If
  115.         Next X
  116.  
  117.         'Nasconde i Tasti di fine Corsa ***********************************
  118.         For X = StartNum + MonthDays To 38
  119.             Me.("Cella" & X).Visible = False
  120.         Next X
  121.     End Sub
  122.  
  123.     Private Function Day([date] As Date) As Integer
  124.         Throw New NotImplementedException()
  125.     End Function
  126.  
  127.     Sub SwitchBack()
  128.         On Error Resume Next
  129.         Me.("Cella" & ButtonNum).ForeColor = &HFF&
  130.         SelectedDateLabel.Text = Format(SelectedDate, "dddd dd mmmm yyyy")
  131.         Me.Label1.Text = Format(SelectedDate, "dddd dd mmmm yyyy")
  132.         Me.Label2.Text = Format(SelectedDate, "mm/dd/yyyy")
  133.         DateCounter = DateCounter + 1
  134.         MonthChange.Focus()
  135.     End Sub
  136. End Class



Tutto qui Grazie da A.Maurizio

PM Quote
Avatar
Snogar (Normal User)
Pro


Messaggi: 145
Iscritto: 09/01/2012

Segnala al moderatore
Postato alle 10:33
Lunedì, 09/01/2023
Non ci hai detto che errori ti da.

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1317
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:41
Lunedì, 09/01/2023
Mancano moltissime informazioni per testare il tuo progetto.

Che strumenti sono:

MonthChange?
Cella1?

Se pubblichi anche Form1.Designer.vb è meglio.
Oppure l'immagine del form in modo che si possa capire facilmente gli strumenti usati.

con questa istruzione cosa vorresti ottenere?

Me.("Cella" & ButtonNum).ForeColor = &HFF0000

un bottone o label indicizzato?

Ultima modifica effettuata da Carlo il 09/01/2023 alle 13:43


in programmazione tutto è permesso
PM Quote
Avatar
A.Maury (Normal User)
Newbie


Messaggi: 4
Iscritto: 09/01/2023

Segnala al moderatore
Postato alle 6:34
Martedì, 10/01/2023
Ciao Carlo grazie per prima cosa per il tuo intervento
Per il resto siccome e un progettino abbastanza articolato nel suo insieme ; Ma decisamente molto semplice
Ti invio il link per scaricare il mio progetto di prova
Cosicché tu possa essere agevolato nella lettura.
Grazie infinite Saluti da A.Maurizio

Questo e il link : https://app.box.com/s/21j4id3i5gw4y2t703ke29hl689y7vb6

Grazie

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1317
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:22
Martedì, 10/01/2023
In VB .Net si programma diversamente da VBA, ho lasciato il codice il più possibile uguale al tuo ma molte sono le modifiche fatte.
Si capisce che lo hai fatto per imparare, spero che il codice che ho modificato ti sia utile per migrare a .Net. Chiedi se hai delle perplessità, le migliorie attuabili sono molteplici.
Scusa se salta fuori qualche inesattezza, non l'ho testato.
In VB .Net Me. si usa per identificare il form della classe in uso che ha lo stesso nome, non c'è differenza con il Form. di VB6, nel caso specifico del tuo codice, visto che tutti gli strumenti sono nel form principale il Me. può essere omesso.


In allegato il progetto VS, completo dell'eseguibile, zippato.

il codice VB.Net

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Dim YrNum As Long, MonthNum As Long, DayNum As Long, MonthDays As Integer, StartNum As Integer
  3.     Dim StartDate As Date, SelectedDate As Date, ButtonNum As Integer, CurMonth As Boolean
  4.     Dim Cella(42) As Label ' matrice di label
  5.  
  6.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  7.  
  8.         ' Riempimento della matrice di label, usabili con l'indice come in VB6
  9.         Dim indice As Integer = 0
  10.         Dim offsetLEFT As Integer = 70
  11.         Dim offsetTOP As Integer = 118
  12.         For riga = 0 To 5
  13.             For colonna = 0 To 6
  14.                 Cella(indice) = New Label
  15.                 Cella(indice).Top = 56 * riga + offsetTOP
  16.                 Cella(indice).Left = 77 * colonna + offsetLEFT
  17.                 Cella(indice).Size = New Size(62, 42)
  18.                 Cella(indice).BorderStyle = BorderStyle.FixedSingle
  19.                 Cella(indice).Tag = indice
  20.                 Cella(indice).TextAlign = ContentAlignment.MiddleCenter
  21.                 Me.Controls.Add(Cella(indice))
  22.                 AddHandler Cella(indice).Click, AddressOf Cella_Click
  23.                 indice += 1
  24.                 If indice > 37 Then Exit For ' le celle superflue non vengono create
  25.             Next colonna
  26.         Next riga
  27.         '-------------------------------------------------
  28.  
  29.         Label1.Text = ""
  30.         Label2.Text = ""
  31.         YrNum = Now.Year
  32.         DayNum = Now.Day
  33.         MonthNum = Now.Month - 1 ' meno 1 perché verrà incrementato da ButtMESEpiu_Click
  34.         ButtonNum = 1
  35.         StartDate = Today
  36.         DateLabel.Text = "Oggi " & StartDate
  37.         ButtMESEpiu_Click(ButtMESEpiu, New EventArgs)
  38.     End Sub
  39.  
  40.     Private Sub Cella_Click(sender As Object, e As EventArgs)
  41.         ' su sender la label cliccata
  42.         ' su sender.tag l'indice inserito in fase di creazione label
  43.         sender.ForeColor = Color.Red
  44.         SelectedDate = sender.Text & "/" & MonthNum & "/" & YrNum
  45.         SwitchBack()
  46.         ButtonNum = sender.tag
  47.     End Sub
  48.  
  49.     Private Sub ButtMESEpiu_Click(sender As Object, e As EventArgs) Handles ButtMESEpiu.Click
  50.         MonthNum += 1
  51.         If MonthNum = 13 Then
  52.             YrNum = YrNum + 1
  53.             MonthNum = 1
  54.         End If
  55.  
  56.         StartDate = 1 & "/" & MonthNum & "/" & YrNum
  57.         UpDateDisplay()
  58.     End Sub
  59.  
  60.     Private Sub ButMESEmeno_Click(sender As Object, e As EventArgs) Handles ButMESEmeno.Click
  61.         MonthNum -= 1
  62.         If MonthNum = 0 Then
  63.             YrNum = YrNum - 1
  64.             MonthNum = 12
  65.         End If
  66.  
  67.         StartDate = 1 & "/" & MonthNum & "/" & YrNum
  68.         UpDateDisplay()
  69.     End Sub
  70.  
  71.     Private Sub ButANNOmeno_Click(sender As Object, e As EventArgs) Handles ButANNOmeno.Click
  72.         StartDate = StartDate.AddYears(-1)
  73.         YrNum = StartDate.Year
  74.         UpDateDisplay()
  75.     End Sub
  76.  
  77.     Private Sub ButANNOpiu_Click(sender As Object, e As EventArgs) Handles ButANNOpiu.Click
  78.         StartDate = StartDate.AddYears(1)
  79.         YrNum = StartDate.Year
  80.         UpDateDisplay()
  81.     End Sub
  82.  
  83.     Sub UpDateDisplay()
  84.         StartNum = DateAndTime.Weekday(StartDate, FirstDayOfWeek.Monday) - 1 ' Domenica = 6, Lunedi = 0
  85.         MonthDays = DateTime.DaysInMonth(YrNum, MonthNum)
  86.         If DateTime.DaysInMonth(YrNum, 2) = 29 Then Label1.Text = "Bisestile" Else Label1.Text = ""
  87.         Dim X As Integer
  88.  
  89.         If MonthNum = Now.Month And YrNum = Now.Year Then
  90.             CurMonth = True
  91.         Else
  92.             CurMonth = False
  93.         End If
  94.  
  95.         SelectedDateLabel.Text = StartDate.ToString("Y") ' visualizza mese e anno
  96.  
  97.         ' Le celle superflue invisibili *********************************
  98.         For X = 0 To StartNum
  99.             Cella(X).Visible = False
  100.         Next X
  101.         For X = StartNum + MonthDays - 1 To 37
  102.             Cella(X).Visible = False
  103.         Next X
  104.  
  105.         'Rietichettare e visualizzare le celle *******************************
  106.         For X = StartNum To StartNum + MonthDays - 1
  107.             Cella(X).Visible = True
  108.             Cella(X).Text = X - StartNum + 1
  109.             If CurMonth = True And X - StartNum + 1 = Now.Day Then
  110.                 Cella(X).ForeColor = Color.DarkBlue
  111.                 Cella(X).BackColor = Color.LightCyan
  112.             Else
  113.                 If X Mod 7 = 6 Or X Mod 7 + 1 = 6 Then ' sabato e domenica
  114.                     Cella(X).ForeColor = Color.DarkBlue
  115.                     Cella(X).BackColor = Color.LightGray
  116.                 Else ' gli altri giorni
  117.                     Cella(X).ForeColor = Color.DarkBlue
  118.                     Cella(X).BackColor = Color.White
  119.                 End If
  120.             End If
  121.         Next X
  122.  
  123.         Label2.Text = StartDate
  124.     End Sub
  125.  
  126.     Sub SwitchBack()
  127.         Cella(ButtonNum).ForeColor = Color.DarkBlue ' ripristino colore
  128.         SelectedDateLabel.Text = SelectedDate.ToLongDateString
  129.         Label1.Text = "Tot Giorni = " & SelectedDate.DayOfYear.ToString
  130.         Label2.Text = SelectedDate.DayOfWeek.ToString
  131.     End Sub
  132.  
  133. End Class



Vedi allegato qui sotto (Calendario_Maury.zip)


Carlo ha allegato un file: Calendario_Maury.zip (24363 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 11/01/2023 alle 12:35


in programmazione tutto è permesso
PM Quote
Avatar
A.Maury (Normal User)
Newbie


Messaggi: 4
Iscritto: 09/01/2023

Segnala al moderatore
Postato alle 15:24
Mercoledì, 11/01/2023
Ciao Carlo scusami se ti rispondo solo ora
Ma come sempre sono stato molto impegnato con il mio lavoro, e solo ora ho potuto scaricare e provare il tuo progetto; E Devo ammettere che sei fantastico in tutti sensi
Funziona a meraviglia e con questo non potevi farmi un regalo più grande di cosi ; Per natale e tutti gli anni a venire.
Perché con questo Progetto avrò sicuramente molto da Studiare e a prendere spunto per altri progetti futuri.
Grazie ancora di tutto
Da A.Maurizio  :k:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:23
Mercoledì, 11/01/2023
Bentornato Maurizio,

l'ultima volta che eri passato da qui ci avevi scritto

"Penso Solo che voi siate dei Degerrimi Burloni ...
... Questa e la prima e l'ultima volta che Tenterò di Chiedere una qualsiasi cosa a Questo forum ...

... Pieno di boria e nulla di più Sinceri saluti da A. Maurizio"


Ci hai ripensato?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1317
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:49
Mercoledì, 11/01/2023
Testo quotato

Postato originariamente da A.Maury:
...Funziona a meraviglia...
Da A.Maurizio  :k:



Non funziona a meraviglia, se apri il calendario e sul mese corrente gennaio clicchi il giorno 5, diventa rosso, ora se incrementi di un mese febbraio e clicchi 9, non diventa rosso come dovrebbe.
E' un bug logico, se capirai perché succede e sarai in grado di correggere l'errore, significa che sei in grado di seguire il flusso del programma e come i valori cambiano all'interno delle variabili.
Correggere gli errori logici è una parte fondamentale dell'apprendimento alla programmazione.
Non ti do nessun indizio per ora, se ti va di provare e se ti seve aiuto, siamo qui.

Ripeto che altro si potrebbe fare per rendere più compatto, elegante e leggibile il programma ma come recita la mia firma: in programmazione tutto è permesso :asd:


in programmazione tutto è permesso
PM Quote
Avatar
A.Maury (Normal User)
Newbie


Messaggi: 4
Iscritto: 09/01/2023

Segnala al moderatore
Postato alle 6:44
Giovedì, 12/01/2023
Ciao Carlo e Ciao a nessuno  
Avete ragione entrambi
Però dovete permettermi da fare un paio di precisazioni che sono :

1 ) Per rispondere all'affermazione fattami da (nessuno ) hai ragione da vendere non lo
nego
Ma da allora nè è passata parecchia acqua da sotto i ponti
Una persona nel frattempo può anche maturare e vederla in modo diverso da quello che
vedeva in passato No ?
Anche voi siete stati meno Polemici che nel passato...!
Ma tutto ciò e semplicemente una mia considerazione personale.

2 ) poi vorrei rispondere a quanto affermato da (Marco)
Anche qui e vero ora che ho potuto vederlo direttamente dal mio pc di casa
che il tuo progetto sia pur molto bello ; Almeno per quanto mi riguarda
Ha qualche problemino
Però non mi aspettavo di certo che tu mi potessi offrire su di un piatto d'argento un tuo
progetto fatto e finito in tutte le sua parti .

D'altronde parliamo di Programmazione ad oggetti, e non di saper fare Pane o pasta, Dolco e quant'altro!

Ho anche visto che hai usato la tecnica deli tasti (Dinamici) per creare il calendario
Ora però chiaramente come dicevo prima, non solo ho la possibilità di studiarla bene a
fondo
Ma anche di capirne la scrittura; cosa che a me manca moltissimo ; in quanto questo
formato del VS 2022 mi è assolutamente nuovo
Tutto qui
Grazie ancora di tutto e Buona Giornata e Buon Lavoro per entrambi da A.Maurizio

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo