- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- Luck Dragon: Asszociációs játék. :)
- lezso6: Nem látszik a kurzor Chrome alatt a beviteli mezőkben?
- Gurulunk, WAZE?!
- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- hdanesz: Hyundai Ioniq 28kWh - Első benyomások - második felvonás
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- stefi68: AnySoft Keyboard (magyarul)
Új hozzászólás Aktív témák
-
trisztan94
őstag
Sziasztok!
MediaElement-el bénázok. Egy animáció közepén szeretnék lejátszani egy távoli serveren lévő mp3 fájlt, de fontos,hogy az animáció csak akkor lépjen tovább, ha vége az mp3nak.
VisualStateManager-rel csináltam az animációkat, ezek a State-ek vannak
SlideIn
SlideOutAz lenne a terv, hogy miután beúszott a UI elem, de még mieltt kiúszott volna játszom le a hangot.
De most jön a csavar: nem is egy, de kettő hangot szeretnék lejátszani egy bizonyos sorrenben. Először lejátszani az elsőt, ha az végigment lejátszani a másodikat, és ha az is befejeződött, elindítani a SlideOut animációt.
Valószínűleg nagyon nagy hülyeséggel próbálkoztam:
Létrehoztam két MediaElementet XAML-ben: media1, media2
Itt a code behind:
private async void play1(int i)
{
Dispatcher.BeginInvoke(() =>
{
media1.Source = new Uri(string.Format("{0}m{1}hu_HU.mp3", mp3HostName, sentences[i].id), UriKind.Absolute);
media1.MediaOpened += (object arg1, RoutedEventArgs arg2) =>
{
media1.Play();
};
});
}
private async void play2(int i)
{
Dispatcher.BeginInvoke(() =>
{
media2.Source = new Uri(string.Format("{0}m{1}en_US.mp3", mp3HostName, sentences[i].id), UriKind.Absolute);
media2.MediaOpened += (object arg1, RoutedEventArgs arg2) =>
{
media2.Play();
};
});
}
private async void Animate()
{
VisualStateManager.GoToState(this, "SlideIn", true);
Task taska = Task.Factory.StartNew(()=>play1(i));
await taska;
if(taska.IsCompleted)
{
Task taskb = Task.Factory.StartNew(() => play2(i));
await taskb;
if(taskb.IsCompleted)
{
VisualStateManager.GoToState(this, "SlideOut", true);
}
}
}Viszont mivel írok ide, kitalálható, hogy nagyon nem múködik. De úgy nagyon nagyon nem.
Hogyan kell ezt normálisan véghezvinni?
-
trisztan94
őstag
Megint egy érdekes dologba futottam bele..
Még mindig arról van szó, hogy gépet cseréltem és nem tudom használni a korábbi projektet.
Felraktam a WP8 SDK-t, amivel jött egy VS2012 express for windows phone.
Eddig azzal bénáztam, hogy a SQLite-ot működésre bírjam. Ez elvileg sikerült, de most buildnél a következő hibát kapom:
Error 1 The "CompileXaml" task failed unexpectedly.
System.IO.FileNotFoundException: Could not load file or assembly 'XamlServicesWP, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. A rendszer nem találja a megadott fájlt.
File name: 'XamlServicesWP, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'Server stack trace:
at Microsoft.Silverlight.Build.Tasks.CompileXaml.GenerateCode(ITaskItem item, Boolean isApplication)
at Microsoft.Silverlight.Build.Tasks.CompileXaml.Execute()
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Microsoft.Build.Framework.ITask.Execute()
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext()WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
Click4Skill AngolNa ez WTF?!
-
trisztan94
őstag
-
trisztan94
őstag
Hali,
Ellopták a laptopom. Szerencsére volt egy backup a solutionról (konkrétan csak copy-paste a visual studio projects mappából külső vinyóra). Kaptam kölcsönbe egy másik gépet, felraktam rá a Visual Studio 2013 express for Windows-t. Az ellopott gépen VS2013Pro volt.
Beraktam a projects mappába a projektet, de amikor meg akartam nyitni, ezt a hibát kapom, plusz egy load failed írást:
Click4Skill Angol.csproj : error : The imported project "C:\Program Files (x86)\MSBuild\Microsoft\Expression\Blend\WindowsPhone\v8.0\Microsoft.Expression.Blend.WindowsPhone.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. C:\Users\Fischer\Documents\Visual Studio 2013\Projects\Click4Skill Angol\Click4Skill Angol\Click4Skill Angol.csproj
Fogalmam sincs, hogy mit jelent
Megnéztem, fent van a Blend, de külön leszedtem a Blend SDK-t is, de úgy sem jó. Mit kell tennem?
Köszi!
-
trisztan94
őstag
Na, leszedtem a mediaopened eseményből a play-t, átraktam külön.
Ezekre az eseményekre iratkoztam fel a konstruktorban:
media.MediaFailed += media_MediaFailed;
media.MediaEnded += media_MediaEnded;
media.MediaOpened += media_MediaOpened;
media.Loaded += media_Loaded;
media.BufferingProgressChanged += media_BufferingProgressChanged;És abban a metódusban amit meghívok van simán a media.Play();
Mindegyik eseményhez raktam egy breakpointot, de semmi, egyikbe sem lép bele.
-
trisztan94
őstag
Így már megy, köszönöm
MediaElementtel próbálok egy távoli szerveren lévő MP3 fájlt streamelni, de valahogy nem akar működni. Hibaüzenetet nem kapok, az URI biztosan jó. Ötletem nincs, hogy mi lehet a probléma
Ezt a kódot próbáltam:
// Konstruktorban
media = new MediaElement();
media.Source = new Uri(string.Format("{0}b10en_US.mp3", mp3HostName), UriKind.Absolute);Egy metódusban
media.MediaOpened += (o, args) => media.Play(); -
trisztan94
őstag
Azt hittem több lesz, az még nem akkora probléma
Még egy gyors kérdés a CustomMessageBox-al kapcsolatban. Beraktam a linkelt XAML-t az app.xaml-be (azon belül az Application.Resources-be), viszont aláhúzza a TargetType="controls:CustomMessageBox"-ot.
Ezeket a hibákat dobálja:
The namespace prefix "controls" is not defined
The attachable property 'IsTiltEnabled' was not found in type 'TiltEffect'.
CustomMessageBox is not supported in a Silverlight project.Gondolom az összes a controls namespace prefix hiánya miatt van, ezért megpróbáltam hozzáadni az xmlns-t.
Végigpróbáltam az összes "controls" xmlns-t amit feldobott az intellisense, de úgy sem jó. Toolkitet is megpróbáltam.
-
trisztan94
őstag
Wow, nagyon szépen köszönöm a segítséget!
Magamtól sosem találtam volna meg ezt, köszönöm!
Közben nagyjából elkészült az app, most kellene átadni tesztelésre a megrendelő cégnek, viszont náluk nincs Windows 8-as gép. Lehet valahogy úgy, hogy "láthatatlan" módba felrakjuk az áruházra, hogy a tesztkészülékükre letölthessék?
Vagy egyáltalán bármi olyan mód van, aminek a segítségével SDK nélkül rá tudják rakni a készülékükre az appot úgy, hogy nem vagyok ott személyesen? -
trisztan94
őstag
Közben most ezzel bénázok.
A teljes képernyős móddal van egy kis probléma, miszerint, ha még nem mentette el a felhasználó a már módosított beállításait (pl. leveszi a pipát valamelyik checkbox-ról), akkor azok elvésznek amikor visszatér a ListPicker-ből. Ezt ki lehet valahogyan küszöbölni?
Továbbá az elemekkel való feltöltése sem teljesen világos. Lenne összesen 6-7 ilyen felugró ListPicker, amikben ki lehet választani azt a lehetőséget, ami a felhasználónak kell. Ezek a lehetőségek fixek, tehát szerintem (lehet megint rosszul gondolkodom) ide rendben van, ha beleírom a lehetőségeket a kódba, nem? Vagy mindenképpen Data Bindinggel csináljam?
Valahogy úgy gondolom ennek a feltöltését, hogy van a kiírt beállítás (legyen most az, amit linkeltem kép formájában: megjelenés, 5 választható opcióval, melyekből egyet lehet kiválasztani), és annak a radio buttonnak van egy értéke. Legyen most 0, 1, 2, 3 és 4. Amikor rábök a felhasználó, akkor az visszaküldi azt az értéket, de még nem menti el.
Vagy van esetleg valamelyikőtöknek már egy ilyen kész megoldása? Próbálgattam google-ben keresni, de nem nagyon találtam semmi ilyesmit
Köszi!
-
trisztan94
őstag
Tökéletes, köszönöm szépen!
Fekvő üzemmódban lenne használva, így a messagebox a helynek a felét tölti csak ki, a gombokban nem fér ki a szöveg teljesen.
Átírtam erre a gombok gridjének méretét:
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Auto) });
grid.Children.Add(button);Így már kifér a gombokban lévő szöveg, viszont a képernyő 2/3-nál "levágja" a tartalmat. Tehát a szülő grid mérete nem elég széles - gondolom én.
Megpróbáltam annak is egy nagyobb szélességet megadni:
var grid = new Grid { Margin = new Thickness(0, 24, 0, 0), Width = 700 };
De semmi változás
-
trisztan94
őstag
Wow, nagyon szépen köszönöm, magamtól nehezen csináltam volna meg ilyenre.
Viszont van valami amit nem értek:
Ha bármilyen osztályba rakom, akkor hibátlan, viszont, ha a mainpage-be, akkor a buttonContent.Select-re a következő hibát dobja:
Error 5 'System.Collections.Generic.IList<string>' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'System.Collections.Generic.IList<string>' could be found (are you missing a using directive or an assembly reference?) C:\Users\*******\documents\visual studio 2013\Projects\Click4Skill Angol\Click4Skill Angol\MainPage.xaml.cs 121 50 Click4Skill Angol
Mindenhol máshol probléma mentes.
Ez mitől lehet?
[ Módosította: Racecam ]
-
trisztan94
őstag
Közben találtam még valamit, aminek a megvalósítására ötletem nincs.
Levideóztam az app Androidos verziójának működését: [link]
Egy ilyen dolgot Ti hogyan csinálnátok meg? Jelenleg csak egy sima Image van berakva egy Gridbe nekem.
Köszönöm!
-
trisztan94
őstag
Kicsit régi dologra reagálok, de most jutottam el oda, hogy ezt a funkcionalitást bele kellene rakni végre.
Csináltam egy Grid-et XAML-ben, benne a három vízszintes gomb:
<Grid
x:Name="messageBoxButtonsGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Content="hello"
Grid.Column="0"/>
<Button Content="szia"
Grid.Column="1"/>
<Button Content="Mizu?"
Grid.Column="2"/>
</Grid>Majd a MainPage konstruktorába beraktam a következőt:
var messagebox = new CustomMessageBox()
{
Caption = "Caption szöveg",
Message = "Message szöveg",
Content = messageBoxButtonsGrid
};
messagebox.Show();Ezzel az exceptionnel száll el:
Mit csinálok rosszul?
-
trisztan94
őstag
Na igen, ilyenkor fogom a fejem
Nem tudtam, hogy van ilyen. Gondolom az a sztenderd, szóval akkor átírom arra.
Köszi.
Sajnos ilyenkor érzem meg a legjobban azt, hogy nincs a cégnél egy Senior WP-os (vagy akár C#-os) kolléga, akitől tudnék tanácsokat kérni. Juniorként nagyon sok dolgot nem tudok a rendszerről, kénytelen vagyok titeket zaklatni a hülyeségeimmel. Köszönöm a segítséget és a türelmeteket!
-
trisztan94
őstag
Köszönöm szépen!
Még egy aprócska kérdésem lenne. Készítettem egy beállítások oldalt az app-nak. Eddig XML-ben tároltam az adatokat, most beraktam adatbázisba.
Az lenne a kérdés, hogy jó-e úgy, hogy a database = new Database() az nem a konstruktorban van? Azért lett az onNavigatedTo override-ba rakni, mert a database.GetSettings() metódus aszinkron és így nem tudtam a konstruktorban használni, külön metódust meg nem akartam meghívni. Nagyon ronda ez így?
private Database database;
private List<Database.Settings> settings;
public Settings()
{
InitializeComponent();
}
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
database = new Database();
settings = await database.GetSettings();
synchronizeCheckbox.IsChecked = Convert.ToBoolean(settings[0].Szinkronizalas);
textToSpeechCheckbox.IsChecked = Convert.ToBoolean(settings[0].Szovegfelolvaso);
meditativeModeCheckbox.IsChecked = Convert.ToBoolean(settings[0].MeditativMod);
meditativeModeVolumeSlider.Value = settings[0].MeditativMod;
dingDongVolumeSlider.Value = settings[0].DingDongHangero;
} -
trisztan94
őstag
Sziasztok!
Egy egyszerű MessageBox-ot akarok megjeleníteni egy OK és egy Cancel gombbal.
Ezt a kódot használom:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
base.OnBackKeyPress(e);
MessageBoxResult result = MessageBox.Show("Biztosan visszalép mentés nélkül?", string.Empty, MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK) NavigationService.GoBack();
}Viszont akár OK-ra, akár Cancel-re nyomok, mindig visszaléptet.
Gondolom itt valami olyasmi probléma lehet, hogy az OnBackKeyPress amúgy is visszaléptetné a júzert, tehát valamivel meg kellene azt gátolni.
Köszi!
-
trisztan94
őstag
Nem is tudtam, hogy le lehet tiltani a UI-t
Így viszont akkor elég lesz, köszönöm!
Más:
Lehet valahogy "előtérbe hozni" egy elemet? Van sok-sok gomb a képernyőn megjelenítve, azokat lehet drag and drop módszerrel húzogatni. Az lenne a cél, hogy az aktuálisan húzott elem a többi "fölött" legyen. Mint a z-index CSS-ben.
-
trisztan94
őstag
Sziasztok!
Van valami hasonló Windows Phone-ra, mint Androidon a Progress Dialog? Az a lényeg, hogy teljesen egyértelmű legyen a felhasználónak, hogy valami történik és addig nem nyúlhat a progihoz. Egy felugró ablak, amiben van egy progressbar és addig nem enged mást csinálni, amíg nincs vége annak a folymatnak.
Valami hasonló: [link]
Köszi!
-
trisztan94
őstag
válasz
trisztan94 #5534 üzenetére
Megoldva adam014 kolléga segítségével
Más:
Ezt már szerintem kérdeztem, de nem találom.
Tehát egy ilyen mozgó led effektet szeretnék. Példa: [link]
Annyi különbséggel, hogy oda-vissza megy.Ezt TextBlock-ba akarom rakni, ha nem fér ki a benne lévő szöveg, akkor animálódjon így. Tud erre valaki valami jó megoldást esetleg?
Köszönöm!
-
trisztan94
őstag
public async Task<string[]> GetData(int size = 6)
{
var r = new Random();
string[] data= new string[size];
List<Data> results;
var conn = new SQLiteAsyncConnection(localDatabaseName);
var query = await conn.QueryAsync<Betuk>("SELECT data from data").ContinueWith(async (t) =>
{
results = new List<Data>(await t);
for (int i = 0; i < size; i++)
{
var rand = r.Next(0, results.Count);
data[i] = results[rand].data;
results.Remove(results[rand]);
}
});
return data;
}Ez a GetData() metódus.
És nem, nem Data mindennek a neve és a típusa, pszeudokódként írtam
-
trisztan94
őstag
Még egy valami:
Van egy animáció az app-ban amit fejlesztek. Ez az animáció adatokat jelenít meg, amihez az adatokat adatbázisból szedem ki aszinkron módszerrel. Az a probléma, hogy valamikor kicsit tovább tart az adatok lekérése, ezért az animáció néha elindul úgy, hogy még nincsenek meg az adatok.
Így van jelenleg megcsinálva:
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
data= await database.GetData();
animate();
}Valami olyasmi kellene, mint jQuery-ben a .then() függvény, ami csak akkor fut le, ha befejeződött az aszinkron kérés.
-
trisztan94
őstag
válasz
Alexios #5528 üzenetére
Bocsi a megkésett válaszért.
Na, igazából az a helyzet, hogy egy .sqlite fájlt akarok deploy-olni az xap-ban.
Eddig futásidőben hoztam létre az adatbázist, de most megváltozott valami, ezért már külső fájlból kell belerakni. A futásidőben való létrehozás nyilvánvalóan az izolált tárhelyre hozta létre az adatbázist, és pontosan ugyanez kellene nekem.Ezt csináltam:
Behúztam az adatbázist a solutionbe. (Databases/db.sqlite az útvonal)
Jobb klikk rá, Properties->
Build Action -> Content
Copy to output directory -> Copy alwaysNa most, ha jól tudom, ez csak olvasható tárhelyre fogja rakni, tehát írni nem lehet majd. Ami nem jó, ezért ezzel a kóddal, amikor indul app átmásolom az izolált tárhelyre, ahol írni és olvasni is lehet:
public void CopyDatabaseToIsolatedStorage()
{
// Obtain the virtual store for the application.
IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication();
// Create a stream for the file in the installation folder.
using (Stream input = Application.GetResourceStream(new Uri("Databases/db.sqlite", UriKind.Relative)).Stream)
{
// Create a stream for the new file in the local folder.
using (IsolatedStorageFileStream output = iso.CreateFile("db.sqlite"))
{
// Initialize the buffer.
byte[] readBuffer = new byte[4096];
int bytesRead = -1;
// Copy the file from the installation folder to the local folder.
while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
output.Write(readBuffer, 0, bytesRead);
}
}
}
}Ez van a MainPage osztály konstruktorában:
if (!database.IsDbPresent().Result) // Ez egy bool-t ad vissza
{
Debug.WriteLine("Database file not found in Isolated Storage. Copying...");
database.CopyDatabaseToIsolatedStorage();
}Na most az a probléma, hogy ez szépen működik, amíg debug módban emulatorban, vagy telefonon tesztelem. Onnantól kezdve, hogy lehúzom a telefont a gépről és később indítom el, valamiért nem tudja olvasni az adatbázist.
Hogyan kell ezt "rendesen" megoldani? Van ennek egy bevált módszere?
-
trisztan94
őstag
Sziasztok!
Hogyan tudok egy fájlt (jelen esetben egy .sqlite adatbázis) elérhetővé tenni az izolált tárhelyen programatikusan?
Tehát solution root-ból fogja meg és másolja át az izolált tárhelyre.Köszi!
-
trisztan94
őstag
Még egy kérdésem lenne.
Kellene implementálni egy felugró MessageBox szerű dolgot, három gombbal. Azt tudom, hogy a beépített MessageBox ezt nem tudja, ezért nézegettem a CustomMessageBox-ot, de ahogy látom, ott is csak kettő gomb lehet maximum.
Van rá valami mód, hogy 2-nél több gombot tudjak egy ilyen felugró üzenetbe rakni? Az lenne a legjobb, ha vízszintesen tudnám a gombokat elrendezni.
-
trisztan94
őstag
Ha az MVVM-et követem, akkor egy olyan metódus ami azt csekkolja, hogy van-e internetkapcsolat, az Model, ugye?
Csak egy Task<Bool> metódus.
(#5469) Karma
Köszönöm!
Szerk:
+ van még két extension method-om egy ExtensionMethods.cs fájlban. Azt hova kellene raknom? Egyelőre a solution gyökerében van.
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
Random rnd = new Random();
while (n > 1)
{
int k = (rnd.Next(0, n) % n);
n--;
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
public static Task<RestSharp.IRestResponse> ExecuteAwait(this RestClient client, RestRequest request)
{
TaskCompletionSource<IRestResponse> taskCompletionSource = new TaskCompletionSource<IRestResponse>();
client.ExecuteAsync(request, (response, asyncHandle) =>
{
if (response.ResponseStatus == ResponseStatus.Error)
{
taskCompletionSource.SetException(response.ErrorException);
}
else
{
taskCompletionSource.SetResult(response);
}
});
return taskCompletionSource.Task;
}Ezek vannak benne.
+ mégegy:
Az alap LocalizedStrings.cs is a gyökérben van. Jó az ott?
-
trisztan94
őstag
+1
Ismertek egy jó hibaelkapó frameworkot? Az a lényeg, hogyha összeomlik az app valamiért, akkor azt logolja, következő indulásnál pedig ajánlja fel a felhasználónak, hogy egy maillel küldje el egy megadott mail címre az összeomlás okát.
iOS-en a PLCrashReportert használta kolléga. Pontosan ugyanez a funkcionalitás kellene.
-
trisztan94
őstag
Hali
A var "típusról" kérdeznék.
Ha jól értem a dolgokat, akkor célszerű var-t írni, ha egyértelmű, hogy mi a változó típusa.
Tehát pl.:
var i = 5; // Itt egyértelmű, hogy integer lesz.
var lista = new List<T>(); // Itt is egyértelmű, hogy a lista nevű változó egy List<T> típusú objektumÉs ott nem érdemes használni, ahol értelem szerűen nem tudhatjuk a típust:
pl.:
var valtozo = Osztaly.GetData(); // Itt ugye nem tudjuk ránézésre, hogy mit ad vissza a metódus.
Jól tudom?
-
trisztan94
őstag
válasz
Peter Kiss #5453 üzenetére
+ (#5454) adam014
Köszönöm!
-
trisztan94
őstag
válasz
Alexios #5449 üzenetére
Köszönöm!
Annyi kellett, hogy a RenderTransform értékét nullára állítottam, ahogy írtad
Más:
Van egy listám, és egy másik listám, aminek a tartalma pontosan ugyanaz, mint az első listának:
List<Tipus> eredetiLista;
List<Tipus> tempLista;
-- Konstruktorban
eredetiLista = valami.GetData();
tempLista = eredetiLista;Egy metódusban dolgozok a tempListával, ott van egy ilyen rész:
tempLista.remove(tempLista[elem])
Ez szépen ki is szedi a tempListából a megadott elemet, de közben kiszedi az eredetiLista-ból is.
Ez normális?
Mindenképpen így kell nekem dolgozni, két listával, úgy, hogy egymástól függetlenül tudjak törölgetni belőlük elemeket, és úgy, hogy mindkettőnek ugyanaz az induló értéke.
a valami.GetData() random értékeket ad át eredetiLista-nak, tehát nem tudom a tempLista-ra is lekérni úgy, hogy egyező legyen. -
trisztan94
őstag
Van nekem egy Button-öm. Meg még 15 másik - tehát összesen 16.
Ezeket a gombokat drag and drop módszerrel (WP Toolkitet alkalmazva) lehet behúzgálni egy dobozba. Ha megfelel a doboz feltételének a gomb, akkor eltüntetem (Collapsed Visiblity) és beállítom a doboz értékét a gomb értékére.
Ez eddig rendben is volt. Viszont most ki lett találva, hogy legyen cserélhető a doboz értéke, ergo, ha új gombot húzok bele miután már be lett húzva egy gomb, akkor a doboz értéke legyen az új gomb értéke, a korábban behúzott gomb pedig kerüljön vissza eredeti helyére.
Azzal van problémám, hogy nem tudom visszarakni a korábban behúzott gombot eredeti helyére.
Ezzel próbálkoztam:
Csináltam egy lastDroppedButton változót. Ez Button típusú, a ManipulationCompleted eseményben ennek értékül adom az aktuálisan húzott gombot.
Csináltam továbbá egy lastDroppedButtonInitialPositionnevű változót, ami Point típusú. Ennek értéket a ManipulationStarted eseményben adok:private void Button_ManipulationStarted(object sender, System.Windows.Input.ManipulationStartedEventArgs e)
{
dragTranslation = new TranslateTransform();
draggedButton = (Button)sender;
lastDroppedButtonInitialPosition.X = draggedButton.TransformToVisual(DragNDrop).TransformBounds(new Rect(0, 0, draggedButton.Width, draggedButton.Height)).X;
lastDroppedButtonInitialPosition.Y = draggedButton.TransformToVisual(DragNDrop).TransformBounds(new Rect(0, 0, draggedButton.Width, draggedButton.Height)).Y;
}Ez szépen el is menti a gomb eredeti helyét.
Tehát a kérdésem az lenne, hogy hogyan tudom explicit megmondani egy gombnak, hogy a pozíciója x,y legyen?
-
trisztan94
őstag
Hali!
Ha van egy meghatározott méretű TextBlock-om, viszont benne nem fér el a szöveg, meg lehet valahogyan oldani, hogy vízszintesen animálódjon?
Pl. úgy, mint az utcai ledes reklámok, jobbról balra átcsúszik a szöveg.
Ha igen, hogyan lehetne?
-
trisztan94
őstag
Megrendelo tud felrakni wp sdk nelkul xap-t telefonra? A telefont developer unlockoltam mar az en fiokommal.
-
trisztan94
őstag
TextBlock akart az lenni, nem TextBox, csak utólag írtam bele.
Ezeket a eseményeket természetesen nem a view-ban kezelem le, van erre egy külön ViewModel-em (ami még mindig nem biztos, hogy jó amúgy, MVC-t csináltam egy darabig, ott ez controller szinten lenne elvileg).
És a gomb kezel kattintást, csak kiszedtem a másolt kódból az irreleváns dolgokat. Amikor rányom a felhasználó a gombra, akkor felugrik egy messagebox, benne egy, az adott szóhoz tartozó példamondattal.
-
trisztan94
őstag
Hali!
Egy memória szójátékot csinálok. 8 szópár van, egyik szó angol, másik szó magyar.
Első körben ezeket megmutatom a felhasználónak. Ez a része kész.A második része lesz érdekesebb.
Két "doboz" van. Az egyik az angol szókártyának (szókártyákkal jelenítem meg a szavakat), a másik magyar szókártyának. Megfog a felhasználó egy neki tetsző szókártyát és behúzza a megfelelő helyre (angolt az angolhoz, magyart a magyarhoz). Ezek után a párját kell az ellenkező nyelvű "dobozba" berakni.Nagyon nincsenek ötleteim, hogy hogyan lehetne ezt megcsinálni.. vagyis vannak, de biztos hülyék.
A szópárok egy Word típusú listaként érkeznek adatbázisból. A Word egy struct:
public struct Word
{
public int id;
public string eng;
public string hun;
public Word(int id, string eng, string hun)
{
this.id = id;
this.eng = eng;
this.hun = hun;
}
}Na most a legelső dolog amit szerintem ellenőrizni kell, az az, hogy milyen nyelvű az adott szókártya, nem? Ezt hogyan tudom? Így néz ki egy ilyen kártya XAML-ben:
<Button
ManipulationStarted="Button_ManipulationStarted"
ManipulationDelta="Button_ManipulationDelta"
ManipulationCompleted="Button_ManipulationCompleted">
<Button.Background>
<ImageBrush ImageSource="/Assets/Main/wordCardHun-568h@2x.png" />
</Button.Background>
<TextBox/>
</Button>És ebből van 16 egy <toolkit:WrapPanel>-en belül
Ezek pedig a magyar és angol szókártyák "dobozai" (amibe belehúzzuk a kártyákat):
<Button x:Name="EnglishWordDefaultContainer">
<Button.Background>
<ImageBrush ImageSource="/Assets/Main/wordEmptyHoleEngCard-568h@2x.png"/>
</Button.Background>
<TextBox
x:Name="EnglishWordDefault"/>
</Button>
<Button x:Name="HungarianWordDefaultContainer">
<Button.Background>
<ImageBrush ImageSource="/Assets/Main/wordEmptyHoleHunCard-568h@2x.png"/>
</Button.Background>
<TextBox
x:Name="HungarianWordDefault"/>
</Button>A TextBox azért van itt benne, mert amikor behúzták a szókártyát, akkor a szókártya szövege fog a TextBox szövege lenni.
1. kérdés:
Hogyan tudom ellenőrizni, hogy az adott szókártyán angol vagy magyar szó található-e? Van-e valami olyasmi XAML-ben, mint HTML-ben a data attribútum?2. kérdés
Miután behúzta az első szókártyát a megfelelő helyre a felhasználó, az először behúzott szónak a hiányzó párját kell behúzni a még üres dobozba.
Én itt arra gondoltam, hogy csinálok egy globális Word típusú változót, amiben benne lesz a behúzott kártya List<Word> értéke. Ez hülyeség?Tehát ugye a 2. lépés az, hogy ellenőrizzük, hogy a helyes kártyát húzta-e be az üres dobozba. Ezt hogyan érdemes?
Köszönöm szépen előre is!
-
trisztan94
őstag
Adatbázis szinkronizációt hegesztek éppen.
RestSharp-al kérem le az adatokat, az JSON stringként érkezik vissza. Én felépítettem az adatbázis táblákat úgy, ahogyan _elvileg_ a távoli szerveren vannak. pl:
public class Oszt
{
[PrimaryKey, MaxLength(11), AutoIncrement]
public int Id { get; set; }
public string ss{ get; set; }
public string dd{ get; set; }
[MaxLength(11)]
public int ff{ get; set; }
public string gg{ get; set; }
[MaxLength(11)]
public int hh{ get; set; }
}Így rakom bele a lekért adatokat a lokális SQLite adatbázisba:
private void OszRtequestCallback(IRestResponse response, RestRequestAsyncHandle handle)
{
List<Oszt> responseData = JsonConvert.DeserializeObject<List<Oszt>>(response.Content);
SQLiteAsyncConnection db = new SQLiteAsyncConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, localDatabaseName));
try
{
db.InsertAllAsync(responseData);
}
catch
{
}
}Na viszont az a probléma, hogy a JSON stringben minden adat string, és elszáll egy exceptionnel, hogy nem tudta intté konvertálni.
Hogyan lehetne ezt kiküszöbölni? -
trisztan94
őstag
válasz
trisztan94 #5376 üzenetére
+ gyors kiegészítés.
Nem string tömb típusúak azok a listák, hanem Word, ami egy struct, de most igazából teljesen lényegtelen.
-
trisztan94
őstag
Hali,
Van egy listám, benne szavak. Az a feladat, hogy x másodpercenként kiírok a képernyőre egy random szót a listából, majd eltüntetem. Ez addig folytatódik, amíg el nem "fogynak" a szavak. Egy szó csak egyszer jelenhet meg a képernyőn.
Erre én a következő megoldást alkalmaztam:
List<string[]> words, addedWords = new List<string[]>();
Random r = new Random();
int index = r.Next(0, words.Count - 1);
wordOutput.Text = words[index];
addedWords.Add(words[index]);Tehát miután kiírtam a szót, berakom az addedWords listába a dolgot.
Ez az ellenőrzés, ami ellenőrzi, hogy benne van-e az adott szó az addedWords listában, azaz ki lett-e már írva:
bool isInAddedwords = addedWords.Intersect(words).Any();
if (!isInAddedwords)
{
// Fenti kód.
}
else
{
// Meghívom újra ezt a metódust, hogy új random index legyen, megnézzük azzal.
}Na most szerintem ez így ronda és túl van bonyolítva. Van erre egy egyszerűbb és szebb megoldás?
-
trisztan94
őstag
válasz
zsambek #5336 üzenetére
Switch?
Erre pedig:
if (beolvrendszam[0] == ellenorzesek[i].rendszam.Substring(0, 1) || beolvrendszam[0] == "?")
{
if (beolvrendszam[1] == ellenorzesek[i].rendszam.Substring(1, 1) || beolvrendszam[1] == "?")
{
if (beolvrendszam[2] == ellenorzesek[i].rendszam.Substring(2, 1) || beolvrendszam[2] == "?")
{
if (beolvrendszam[3] == ellenorzesek[i].rendszam.Substring(3, 1) || beolvrendszam[3] == "?")
{
if (beolvrendszam[4] == ellenorzesek[i].rendszam.Substring(4, 1) || beolvrendszam[4] == "?")
{
if (beolvrendszam[5] == ellenorzesek[i].rendszam.Substring(5, 1) || beolvrendszam[5] == "?")
{
if (beolvrendszam[6] == ellenorzesek[i].rendszam.Substring(6, 1) || beolvrendszam[6] == "?")
{
Console.WriteLine("6. Feladat: {0}", ellenorzesek[i].rendszam);
}
}
}
}
}
}
}Lehet lehagytam pár csukó kapcsos zárójelet..
Nem lenne elég egyetlen egy ilyen?
if (beolvrendszam[i] == ellenorzesek[i].rendszam.Substring(i, 1) || beolvrendszam[i] == "?")
-
trisztan94
őstag
Egy olyan dolgot kell csinálni, hogy ha történik egy esemény, akkor el kell tüntetni valamit, megjeleníteni valamit másfél másodpercig, ha letelt a másfél másodperc azt amit most megjelenítettünk eltüntetni majd meg kell jeleníteni megint valamit 3 másodpercig, majd ha az letelt, azt is eltüntetni és az eredetileg látszó dolgot visszaállítani láthatóvá...
Na most én ezt így oldottam meg:
emptyLetterHole.Visibility = System.Windows.Visibility.Collapsed;
filledLetterHole.Visibility = System.Windows.Visibility.Visible;
draggedButton.Visibility = System.Windows.Visibility.Collapsed;
timer.Interval = TimeSpan.FromMilliseconds(1500);
timer.Tick += (arg1, arg2) =>
{
filledLetterHole.Visibility = System.Windows.Visibility.Collapsed;
goodLetterHole.Visibility = System.Windows.Visibility.Visible;
timer2.Interval = TimeSpan.FromMilliseconds(3000);
timer.Tick += (arg, arg0) =>
{
goodLetterHole.Visibility = System.Windows.Visibility.Collapsed;
emptyLetterHole.Visibility = System.Windows.Visibility.Visible;
};
timer2.Start();
};
timer.Start();Ez így nagyon csúnya? Lehetne szebben?
------
+1Van egy button objektumom, annak a gyermeke egy TextBlock:
<Button
x:Name="myButton">
<Button.Background>
<ImageBrush ImageSource="/Assets/Main/SquareBackground@2x.png" />
</Button.Background>
<TextBlock
x:Name="myButtonText"/></button>Erre a gombra rá van kötve egy Manipulation eseménysorozatra (drag and drop - started, delta és completed), ott így hivatkozok a manipulált gombra:
private void Drag_ManipulationStarted(object sender, System.Windows.Input.ManipulationStartedEventArgs e)
{
draggedButton = (Button)sender;
}Hogyan tudom a draggedButton-ban lévő TextBlock Text értékét megváltoztatni?
-
trisztan94
őstag
válasz
ferensz #5284 üzenetére
Na szuper, én is olvasgatok más fórumokat, ott is nagyon ajánlják
---
mp3 fájlokat szeretnék lejátszani, erre két eset van:
1. Felhasználó letöltötte korábban az egész pakkot és lokális fájlokból
2. on-the-go stream-eljükItt szintén nincs lehetőség válogatni, csak mp3 fájlok vannak.
Ezt az MSDN cikket találtam erről. Ha jók az információim, elvileg csak BackgroundAudio-val lehet lejátszani mp3 fájlokat. Viszont ez a cikk arról szól, hogy úgy szólaljon meg a "zene", mintha a zenelejátszó lenne, ergo megállítja az aktuális zenét. Ezek iylen kis hangeffektek lennének csak, tehát ez nagyon nem kell.
Lehet valahogy .mp3 hangeffektek lejátszani egyszerűen úgy, hogy mind lokálból, mind online stream-ről menjen?
-
trisztan94
őstag
ReSharper-t használ valaki? Tényleg olyan jó, mint ahogy a videóban mutatják, ennyire megkönnyíti a munkát?
Céges gépen vagyok most, ha tényleg szuper akkor beszélnem kell főnökkel, hogy vegyünk licencet + rendszergazdával, hogy rakja fel, szóval mielőtt ebbe a procedúrába belekezdenék, érdekelne a véleményetek
----
(#5282) martonxHát mondjuk ja, szarból csak szar várat lehet építeni.
Viszont azzal mindenképp kell kezdeni valamit, hogy ne egyszerre küldje el a 12 request-et, mert 10-ből 2-3* mindig előjön a memória hiba.
-
trisztan94
őstag
A táblalekérésekkel kapcsolatban lenne egy kérdésem még
RestSharppal történik a szerverrel a kommunikáció aszinkron módon.
Ezt úgy raktam most össze, hogy van 12 RestRequest típusú változóm amelyekben a kérés paraméterei vannak (felhasználónév, jelszó, SQL query, stb).
Így néz ki egy ilyen RestRequest:
RestRequest nevekRequest= new RestRequest(hostName, Method.POST);
nevekRequest.AddParameter("parancs", "SELECT * FROM nevek");
nevekRequest.AddParameter("user", databaseusername);
nevekRequest.AddParameter("prog_ver", prog_ver);
nevekRequest.AddParameter("databasehost", databasehost);
nevekRequest.AddParameter("databaseusername", databaseusername);
nevekRequest.AddParameter("databasepassword", databasepassword);
nevekRequest.AddParameter("databasename", databasename);
nevekRequest.AddParameter("db", db);Ebből 12 van.
Ezek után mind a 12-t lefuttatomclient.ExecuteAsync(nevekRequest, NevekCallback)
Ezt szintén 12x, minden egyes Request-re.Ezek után van megint 12 callback metódusom minden egyes request-re.
private void UsersRequestCallback(IRestResponse response, RestRequestAsyncHandle handle)
{
List<Users> responseData = JsonConvert.DeserializeObject<List<Users>>(response.Content);
Debug.WriteLine("Users-firstname: " + responseData[0].FirstName);
}1. Tisztában vagyok vele, hogy ez így valami elképesztően gány, viszont így este nincs nagyon most ötletem, hogy hogyan lehetne szépen megoldani
2. Valamikor memória túlcsordulás miatt behal a szerver a 12 egyszeri request miatt, tehát valahogyan úgy kellene csinálni, hogy amikor az 1. request készen van, akkor indítjuk a 2.-at, ha az kész a 3.-at, stb. Ezt szintén hogyan lehetne szépen megoldani?
---
Végül a DeserializeObject<>-nek azt az osztályt adtam, amiből az adatbázis táblákat építettem fel, tehát:
public class Nevek
{
[PrimaryKey, NotNull, MaxLength(11), AutoIncrement]
public int id{ get; set; }
[NotNull]
public string nev{ get; set; }
}Tehát:
List<Nevek> responseData = JsonConvert.DeserializeObject<List<Nevek>>(response.Content);Az a baj, hogy az id a JSON stringben stringként van benne és a DeserializeObject meg nem tudja átkonvertálni integerré:
Could not convert string to integer:
De még ez a legkisebb probléma, mert más tábladefiníciókban van DateTime típus is.
Tehát az lenne itt a kérdés, hogy hogyan tudom convertálni a deserializeobject értékeit úgy, hogy megfeleljenek azok a megadott típus (jelen esetben osztály) típusainak? Vagy kezeljek mindent stringként oszt' csókolom? Esetleg csináljak még 12 osztályt, amikben csak string-ként vannak ugyanezek a field-ek?
-
trisztan94
őstag
válasz
martonx #5275 üzenetére
Hát én nem találtam meg azt az automatikus generálás cuccost.
Írtam egy ilyen model osztályt:
public class Nevek
{
public string id; //az id is stringként jön át
public string nev;
}És ezt csináltam:
Nevek responseData = JsonConvert.DeserializeObject<Nevek>(response.Content);
Hibaüzenet:
An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.DLL but was not handled in user code
Additional information: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'Click4Skill_Angol.Model.Nevek' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
Mint ahogy előbb írtam, ez a szervertől visszakapott json string:
"[{\"id\":\"1\",\"nev\":\"Aladár\"},{\"id\":\"2\",\"nev\":\"Béla\"}]"
Mit csinálok rosszul?
-
trisztan94
őstag
A megkapott Json stringgel szeretnék elkezdeni dolgozni, erre e Json.NET lib deserializer-jét akarom felhasználni.
Ebben a formában kapom meg a stringet:
[{\"id\":\"1\",\"nev\":\"Áron\"},{\"id\":\"2\",\"nev\":\"Béla\"}]
Ezt parse-olni szeretném, erre a következőt használom:
var responseData = JsonConvert.DeserializeObject<dynamic>(jsonString);
Viszont itt nem tudom, hogy hogyan tudok hivatkozni a dolgokra. Ezt a SO kérdést nézegettem, leginkább a legfelső választ.
De mivel itt több adat van, gondolom maga a responseData is egy tömb lesz, nem? (Pontosabban egy JArray tömb), tehát az lenne a logikus, ha úgy tudnék hivatkozni az első sor nevére, hogy:
responseData[0].nev
Viszont ha ezt csinálom, dll hibával kivág.
Ez az értéke a responseData-nak:
{[ { "id": "1", "nev": "Aladár" }, { "id": "2", "nev": "Béla" }]}Tehát a kérdés az lenne, hogy hogyan tudok hivatkozni valamire? Mondjuk a 2. névre a responseData-ban.
-
trisztan94
őstag
Úgy döntöttem, hogy SQLite-ot fogok használni lokális adatbázisként, mert mind az Android, mind az iOS verziója az appnak azt használja. Ezt a leírást követtem, név szerint a következő dolgokat használom fel: sqlite-net, sqlite-net-wp-8, SQLite for Windows Phone.
Rendesen működik is.Szeretném ellenőrizni, hogy létezik-e már egy adatbázis, ha nem, akkor csináljon újat. Ezt hogyan tudom?
Jelenleg ez a Database.Create() metódusom:
public async void Create()
{
SQLiteAsyncConnection db = new SQLiteAsyncConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "localdatabase.db"));
await db.CreateTableAsync<Sample>().ContinueWith((results) =>
{
Debug.WriteLine("Sample table created!");
});
}Ez nem ad vissza semmilyen infót arról, hogy létezik-e az adatbázis, ha nincs, akkor létrehozza, ha van akkor nem tudom. Egyáltalán az is baj, hogy nem a solution-be hozza létre az adatbázist, hanem (ha jól értem), az app saját izolált tárhelyére, így nagyon nézegetni sem tudom VS-ból, sőt, azt gyanítom, hogy amikor újra debug módban futtatom, minden alkalommal törli az egészet ahogy van.
Tehát nekem egy egyszerű csekkolási módszer kellene, ami megmondja, hogy létezik-e már az adatbázis (+ benne a táblák), plusz valami amivel a solution explorerben is nézhető és létező dologgá tudom varázsolni. Tudtok ilyent?
-
trisztan94
őstag
válasz
csiki_92 #5261 üzenetére
Szia,
public static void kerulet(Double sugar)
{
double kerulet = 0;
kerulet = 2 * Math.PI * sugar;
kerulet = Math.Round((decimal)kerulet, 3);
Console.WriteLine("A kör kerülete:"+ kerulet +" cm");
}Ha nem castolod decimalra, akkor lefele kerekíti, tehát pl.:
double kerulet = 1.2759;
Math.Round((decimal)kerulet, 3); // -> értéke 1.276
Math.Round(kerulet, 3); // -> értéke 1.275Ha változókkal összefűzött stringet iratsz ki, akkor használd a string.Format()-ot:
Console.WriteLine(string.Format("A kör kerülete: {0} cm", kerulet));-----
martonx
"szerinted egy RESTful API mit csinál? Valami csodát? Mert az is a kapott megfelelően felparaméterezett POST, GET, PUT, DELETE http hívások alapján Json-nal (xml-lel, odata-val, whatever) kommunikál a külvilággal."Persze, tisztában vagyok vele, hogy mi az a REST API és, hogy mit tud/mit nem tud, nem is az a baj. Egyszerűen baromi rondának tartom azt, hogy SQL stringeket kell nekem küldözgetnem egy távoli dologhoz, mikor köze nincs hozzá. Utasítást küldeni rá, oszt' majd az API megoldja ahogyan megoldja, ne nekem kelljen figyelni a query szintaktikájára, stb. Mert itt ugye nem 1-2 query-ről beszélünk, hanem több százról és ha azok közül pár hibás, nincs nagyon fogalmam, hogy melyik, mert csak egy "Query failed" választ kapok rá, és emiatt azzal fog elmenni az idő, hogy ezt keresgéljem.
-
trisztan94
őstag
Áh, ez az igazi b@Ƶmeg kategória
Hát nekem ne mondd, most láttam csak a MySQL adatbázisban lévő adatokat... Lekérve a users táblát, minden plain text-ként benne, mind a 7000(!!!!!) felhasználó összes adata: felhasználó, jelszó, bankkártya adatok és még sorolhatnám.
Felvetettem nekik, hogy legyenek mán' oly kedvesek, rakjanak már fel egy RESTful API-t a szerverre, mert ez így botrányos (CSAK HTTP POST requesteket lehet küldeni és egy nagyon ótvar JSON string jön vissza), de nem, nem lehet, mert így jó droidon és iOS-en, há mé' ne lenne jó WP-n....
Szóltam nekik a plain texttel kapcsolatban, kíváncsi leszek a válaszra.
-----------------
Próbálok haladni vele, megint egy olyan kérdésem lenne, hogy jól gondolkodom-e.
Készítettem egy publikus osztályt: Database.cs
Ebben van kb. 20 constans string változó, amikben a csatlakozási adatok vannak. Mind private.Van benne egy public void Synchronize() metódus amit meghívva elindul a szinkronizáció, plusz ilyen segédmetódusok, mint pl. public bool IsLoggedIn(), stb.
Ugyanebben a Database.cs fájlban (de nem a Database osztályban) vannak a lokális adatbázis tábladefiníciói, pl.:
[Table(Name = "sample")]
public class Sample
{
[Column(Name = "id", IsPrimaryKey = true, CanBeNull = false, IsDbGenerated = false, DbType = "INT(11) NOT NULL PRIMARY")]
public int Id { get; set; }
[Column(Name = "Data", CanBeNull = false, IsDbGenerated = false, DbType = "NVarChar NOT NULL")]
public string Data{ get; set; }
}Plusz még vagy 20 ilyen. Tehát egy fájlban van 21 osztály: a Database és a maradék 20 tábladefiníció.
Ezt mind én a model mappába raktam.
Az lenne a kérdésem, hogy helyes-e ez így? Ha nem, akkor hogyan lenne az?------------------
Megint más:
SQLite vagy MSSQL legyen a lokális adatbázis? Melyik jobb erre a célra?
-
trisztan94
őstag
+ (#5240) Karma
Végül sikerült megoldani RestSharp-pal a dolgot, tényleg elég fáradt voltam már, azért nem ment. További pluszpont neki, hogy async a dolog, ami követelmény az alkalmazásnál.
Tényleg, mielőtt hülyeségeket beszélek: Az async az külön szálon fut? Pl. a RestSharp ExecuteAsync(request, asynccallback) metódus.
A HTTPClient-et NuGet-ről töltöttem le, de ott mindig kihalt maga a httpclient osztály valami hibával. (Most nem vagyok Windows előtt, nem tudom replikálni az esetet, ha érdekel titeket, akkor holnap elvileg lesz a kezem ügyében windows)
------
Másik dolog, MySQL adatbázis kapcsolódással kapcsolatban:
Van egy távoli szerveren egy MySQL adatbázis, illetve van az app saját MSSQL adatbázisa. A két adatbázis felépítése teljesen ugyanaz, ugyanazok a táblák/oszlopok, ezeknek sorrendje, oszlopok típusai, stb. Az összes adat a távoli szerveren van amivel dolgozni kellene, ezeket az adatokat kellene lemásolni egy szinkronizálás folyamán, tehát szinkronizálni kell az adatbázisokat. Azért van egy külön lokális adatbázis, hogy offline is működjenek a funkciók. Ha nincs semmi a lokális adatbázisban, akkor letöltünk mindent, ha vannak benne cuccok, akkor pedig ellenőrizzük a timestampeket (minden sornak van egy timestampje), ha korábbi a lokális adatbázis verziója, akkor letöltjük a szükséges dolgokat a távoli cuccról (tehát hogyha webről vagy másik OS-ről (megvan már droira és iOS-re az app, nekem az iOS forráskódja meg, de így, hogy C#-on és Javascripten nevelkedtem, kb olvasni nem tudom, egyszerűen nem értem meg mi micsoda
)), ha pedig újabb a lokális timestamp, akkor pedig feltöltjük az adatokat a távoli szerverre.
Az is fontos, hogy kiderült, hogy nem közvetlenül a MySQL adatbázissal kellene kommunikálni, hanem egy PHP scripttel. Erre kellett a HTTP POST, azzal kell elküldeni a MySQL query-t stringként + további paramétereket és egy JSON stringet ad vissza válaszként.
Na most ez így elég rossz, pár dologgal problémában vagyok, mind megértésileg, mind implementáció kérdésekben:
1. Egy senior kolléga azt mondta nekem, hogy az lenne a legjobb, ha egy web service lenne rákötve a MySQL adatbázisra, amivel közvetlenül tud szintén HTTP kérésekkel kommunikálni az app, de a C# saját LINQ Query szintaktikájával, és az objektumokat tudna visszaadni nem JSON-t.
1/a. Össze kellene állítanom egy ilyen web service demót, hogy tudjuk mutatni a megrendelő cégnek, hogy pontosan mit csináljanak. Na most itt ugye az az egyik kérdés, hogy tényleg azzal érdemes-e dolgozni,
a másik pedig, hogy hogy az istenbe néz ki egy ilyen dolog? Rá lehet-e egyáltalán rakni egy csak PHP és MySQL-t támogató szerverre? Ha igen, hogyan? Csinált már valamelyikőtök ilyet? Hogyan kezdjek egyáltalán neki ennek a dolognak?2. Hogyan kellene kb. kinéznie ennek a szinkronizációnak? Esetleg, ha valamelyikőtök csinált már ilyet, tudnátok egy nagyon primitív példát mutatni? Sajnos kötve vagyunk a MySQL-hez.
Köszönöm!
-
trisztan94
őstag
Sziasztok!
Egy szimpla HTTP POST kérést szeretnék Windows Phone 8 alól küldeni kifele. Na most vagy nekem van nagyon késő, vagy nem tudom, de sehogy sem sikerül, semmi sem kompatibilis WP8-al, a NuGet csomagok 95%-a nem települ emiatt.
RestSharp-pal sem megy, sem HttpClient-el.
Ha valaki csinált már ilyet, tudna nekem egy működő példát szolgáltatni?
Köszönöm!
Egész este ezzel szoptam és 7-kor indulok munkába..
-
trisztan94
őstag
Sziasztok!
Windows Phone 8 app-ból hogyan tudok egyszerűen csatlakozni egy távoli MySQL adatbázishoz?
-
trisztan94
őstag
válasz
Flashback #5199 üzenetére
Ez most egy nagyon általános példa lesz, de remélem megérthető.
// A szam1 változó értéke null lesz, mivel nincs értéke.
int szam1;
int szam2 = 3;
// Itt mivel egy null értéket akarunk felhasználni, kapsz egy nullReferenceException-t, ami azt jelenti,
// hogy null-ra hivatkoztál, tehát a semmire hivatkoztál.
Console.WriteLine(string.Format("A két szám összege: {0}", szam1 + szam2));Ezt ki lehet védeni egy try-catch-el:
try
{
int osszeg = szam1 + szam2;
}
catch
{
// Elkapjuk a kivételt, lekezeljük a hibát, hibaüzenetet írunk ki.
MessageBox.Show("Kérem adjon értéket az első számnak!");
}Vagy ahogy martonx írta, lehet null-ra csekkolni egy if-el:
if(szam1 != null)
{
// Csinálunk valamit.
}
else
{
MessageBox.Show("Kérem adjon értéket az első számnak!");
} -
trisztan94
őstag
válasz
Alexios #5144 üzenetére
No, belekezdtem a data bindingba,de egy kis problémába ütköztem:
Első körben az összes stringet ami az alkalmazásban van beraktam az AppResources.resx fájlba, mivel kétnyelvű lesz a program (angol és magyar). Minden flottul megy, gombokra működik a binding:
<Button
Name="login"
BorderThickness="0"
Height="70"
Click="login_Click"
Margin="311,388,265,22"
Content="{Binding Path=LocalizedResources.LogInText, Source={StaticResource LocalizedStrings}}">
<Button.Background>
<ImageBrush ImageSource="/Assets/Menu/mainMenuButton@2x.png"/>
</Button.Background>
</Button>Szépen megjelenik a string amikor futtatom az alkalmazást.
Viszont valamiért TextBlock-al nem működik. Nem egy darabbal, az összessel. Így használom:
<TextBlock
Name="sudentNameText"
Text="{Binding Path=LocalizedResources.LoggedInText, Source={StaticResource LocalizedStrings}}"
Margin="31,0,670,451"/>Természetesen ugyanúgy benne van a resource fájlban a string. Mint mondtam, egyik TextBlock-al sem működik a binding valamiért
Ha implicit beírom a Text attribútumba a szöveget, akkor megjelenik.
Mit csinálok rosszul?
Bocsi a sok hülye kérdésért
-
trisztan94
őstag
Az app főmenüjében van 4 almenü, összesen kb. 20 eseménykezelővel. Még amikor Java-ban fejlesztettem, emlékszem ott úgy csináltam, hogy egy külön Event Handler osztályba raktam az összeset, hogy ne zavarja ott a UI-nál a vizeket a sok spagetti.
Hogyan kellene ezt C#-ban csinálni?
-
trisztan94
őstag
-
trisztan94
őstag
válasz
Alexios #5127 üzenetére
Hát nem az én ötletem, nekem is ki van a f*szom emiatt
Viszont nem nagyon vágom, hogy hogyan lehetne arányokkal olyan pontossággal megadni, mint pixelekkel?
Pl. egyik gomb margói: 270,92,270,289, az alatta lévőé: 308,-28,252,28
Tehát nem pontosan egymás alatt vannak. Ezt hogy adom meg arányokban?
-
trisztan94
őstag
válasz
Alexios #5123 üzenetére
Azt a dolgot rakom össze amiről már korábban kérdeztem: "láthatatlan" gombokat rakok rá egy képre, hogy nyomható legyen. Margókkal játszadozom, hogy szépen fölé kerüljön, ezt a designerben csinálom, drag n droppal.
Na most amikor végre elégedett vagyok, hogy pont felette van, elindítom telefonon és valamennyivel el van csúszva a gomb, meg a grafika is kifér teljesen (16:9-es a grafika, a designer ahogy látom 15:9-es). Nem akkora probléma, de zavaró.
Közben sikerült véletlen kitörölnöm az AppResources.resx és AppResources.designer.cs fájlokat a Resources mappából, azt a következményt okozva, hogy hiányolja őket az alkalmazás, kb. 40 hibaüzenetet kapok. Újra lehet ezeket generálni az alapértelmezett beállításokkal, vagy csináljak egy új projektet, majd csak másolgassam át a kódom?
-
trisztan94
őstag
válasz
Alexios #5121 üzenetére
Köszönöm!
Még egy gyors kérdés és hagylak titeket:
A designerben lévő "készüléket" nem lehet megváltoztatni? HTC 8x-en tesztelem az alkalmazást, de annak más a képernyő aránya, így pár dolog elcsúszva jelenik meg, mint designerben vagy emulatorban. Fontosabb, hogy a designernek ugyanaz legyen a képernyőaránya, mint a készülékemnek, hiszen azon "rakom össze" a kinézetet.
-
trisztan94
őstag
Sziasztok!
WP lenne a kérdés tárgya ismét.
Van egy gombom XAML-ben, annak adtam egy hátteret:
<Button Name="gomb" BorderThickness="0" Height="70" Click="gomb_Click" MouseLeftButtonDown="gomb_MouseLeftButtonDown" Margin="270,92,270,289">
<Button.Background>
<ImageBrush ImageSource="/Assets/Menu/mainMenuButton@2x.png"/>
</Button.Background>
</Button>Szeretném, ha megváltozna a háttérkép amikor éppen rányom a júzer (btw, ez WP alatt a MouseLeftButtonDown esemény?) egy másik képre.
Hogyan tudom ezt megoldani?
-
trisztan94
őstag
Hello!
Egy olyan alkalmazast kell Windows Phone 8 ala megirnom, aminek a hattereben van egy kep, rajta szovegek. Sajnos bele vannak egetve a szovegek a kepbe, es azokat nyomhato gombokka kellene atalakitani. Arra gondoltam, hogy a szovegek fole rakok "lathatatlan" gombokat, es azokra rarakom az esemenykezeloket.
Ezt igy meg lehet csinalni XAML-ben vagy C#-ban? Ha nem, mi a legjobb megoldas? A kepen nem tudok valtoztatni.
-
trisztan94
őstag
válasz
martonx #5094 üzenetére
Nem tudom ismered e, de nekem a kedvenc online kódmegosztós-futtatós szolgáltatásom a .NET Fiddle.
Több nyelvet is tud, bele lehet rakni NuGet csomagokat, stb.
-
trisztan94
őstag
válasz
Goose-T #5082 üzenetére
Koszonom!
Elkezdtem most utananezni jobban a dolgoknak, foleg az MVVM patternnek.
Esetleg arra valaki valamit, hogy mikor erdemes WP eseteben MVP es MVVM patternt hasznalni? Milyen tipusu apphoz melyiket kell, stb.
Illetve, ha jatekban gondolkozunk XNA fw-el, ott inkabb az MVC-t erdemes?
-
trisztan94
őstag
Uhh, hát ezek szerint nem nagyon értettem meg az OOP (és a patternek) fogalmát. Nagyon ritkán van olyan, hogy 0-ról kell lekódolnom egy pattern szerint valamit.
Tudsz esetleg ajánlani egy jó könyvet vagy videósorozatot ami ezt taglalja és elmagyarázza?
(#5068) j0k3r!
totalisan keverve van az angol es a magyar (getMagyarSzavak, isInMondat, stb.)
Na igen, valamikor meg tudom hirtelen fogalmazni magyarul a változó nevét, valamikor kicsit gondolkodom rajta és akkor csak leírom angolul, vagy félig magyarul félig angolul. Rossz szokás
Köszönöm, hogy elolvastátok és, hogy tanácsot adtatok, megpróbálom ezen területen komolyan elkezdeni fejleszteni magam, mert ez így nem állapot
-
trisztan94
őstag
Egy ténylegesen C# kérdés most:
XAML-ben a definiált GRID ahogyan észrevettem egyáltalán nem úgy működik, mint a Windows Forms-os.
3 sorban van összesen 12 gomb, random gomboknak szeretném a Content attribútumát változtatni, de sehogyan sem tudok rá hivatkozni..
<Grid x:Name="buttons_container" HorizontalAlignment="Center" VerticalAlignment="Bottom">
<Grid.RowDefinitions>
<RowDefinition Height="70"/>
<RowDefinition Height="70"/>
<RowDefinition Height="70"/>
</Grid.RowDefinitions>
<Grid x:Name="buttons_first_row" Grid.Row="0" Width="600">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Button HorizontalAlignment="Center" Grid.Column="0" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="1" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="2" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="4" Content="" Foreground="White" Height="auto" Width="150" />
</Grid>
<Grid x:Name="buttons_second_row" Grid.Row="1" Width="600">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Button HorizontalAlignment="Center" Grid.Column="0" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="1" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="2" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="4" Content="" Foreground="White" Height="auto" Width="150" />
</Grid>
<Grid x:Name="buttons_third_row" Grid.Row="2" Width="600">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Button HorizontalAlignment="Center" Grid.Column="0" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="1" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="2" Content="" Foreground="White" Height="auto" Width="150" />
<Button HorizontalAlignment="Center" Grid.Column="4" Content="" Foreground="White" Height="auto" Width="150" />
</Grid>
</Grid>InterfaceDesigner-en próálható.
Tehát az a lényeg, hogy két random számom van: x és y. Az x az oszlopokat, az y a sorokat jelöli.
Ha pl. a 3-mat dob ki, akkor a 3. sor x. elemét szeretném módosítani.
Próbáltam így C#-ban:
buttons_first_row.Children.ElementAt(2)...ez szépen meg is találja a nekem kellő button-t (jelen esetben az első sor 3.), de módosítani sehogy sem tudom, ugyanis nincs .Content tulajdonsága a System.Windows.UIElement-nek.
Hogyan tudnám ezt szépen megoldani? Adjak minden gombnak egyedi nevet, aztán egy baromi nagy switch elágazással jelöljem ki őket?
-
trisztan94
őstag
Sziasztok!
Egy programozástechnikai kérdésem lenne:
Windows Phone 8-ra fejlesztek egy angol nyelvoktató alkalmazást. Két részre van osztva:
1. rész: írás és hallás alapján történő tanulás
2. rész: mondatok összeillesztéseA két rész szorosan kapcsolódik egymáshoz.
Az első rész működése:
Kirak a képernyőre két egyező mondatot egymás alá a program. Az egyik magyarul, a másik angolul. Felolvassa a magyart, vár 2mp-et majd felolvassa az angolt. Ezek után még ezt 4x megcsinálja, csak más mondatokkal.
Ez a része megvan.A második rész működése:
Az első részben megjelenített mondatokat kell újra összerakni. Kiírja a magyar mondatot, ennek az angol megfelelőjét kell összerakni 12 szóból, helyes sorrendben. Na most itt az az egyik fő dolog, hogy a 12 szóból 12-x random szó, az x pedig a mondatba való szavak nyilván (hogy ki lehessen rakni a mondatot).Na most ezt én próbáltam objektumorientáltan megoldani, úgyis rég dolgoztam már úgy, nem árt egy kis gyakorlás, meg hát sokkal szebb is úgy az egész.
Osztályok, felépítésük, egymáshoz való kapcsolatuk:
Először felsorolom az osztályokat:
ElsoResz
Mondat
Szo
HasznalhatoMondatok
Extraszavak
MasodikReszAz ElsoResz.cs-ben van az első rész logikája, tehát a random mondat kiválasztása a lehetséges mondatokból, annak a kiírása. Jelenleg egy sima void metódus tölti fel a mondatokat explicit módon, így:
private List<Mondat> Mondatok = new List<Mondat>();
private int idSzamlalo = 0;
private void mondatFeltoltes()
{
Mondat mondat = new Mondat(idSzamlalo, "Szeretem a fagyit.", "I like ice cream");
Mondatok.Add(mondat);
idSzamlalo++;
mondat = new Mondat(idSzamlalo, "Ő hol van?", "Where is she?");
Mondatok.Add(mondat);
idSzamlalo++;
mondat = new Mondat(idSzamlalo, "Annak tizennégy éves", "Ann is fourteen");
Mondatok.Add(mondat);
}Mondat.cs-ben van a mondatok felépítése, az így néz ki:
public class Mondat
{
public int ID;
public string magyar; //magyar mondat
public string angol; //angol mondat
public string[] angolSzavak; //mondat szavai (angol)
public string[] magyarSzavak; //mondat szavai (magyar, de most ez lényegtelen)
public Mondat(int ID, string magyar, string angol)
{
this.ID = ID;
this.magyar = magyar;
this.angol = angol;
}
public void setAngolSzavak (string[] angolSzavak)
{
this.angolSzavak = angolSzavak;
}
public string[] getAngolSzavak()
{
return angolSzavak;
}
public void setMagyarSzavak(string[] magyarSzavak)
{
this.magyarSzavak = magyarSzavak;
}
public string[] getMagyarSzavak()
{
return magyarSzavak;
}
}Amikor végigmentek a mondatok, akkor átlépünk a 2. részre. Oda úgy lépünk, hogy a kiírt mondatokat berakom egy statikus osztályba, a HasznalhatoMondatok.cs-be, ami így néz ki:
public static class HasznalhatoMondatok
{
public static List<Mondat> Mondatok = new List<Mondat>();
public static void setMondatok(List<Mondat> _Mondatok)
{
Mondatok = _Mondatok;
}
public static List<Mondat> getMondatok()
{
return Mondatok;
}
}Így rakom bele az ElsoResz.cs-ből navigálás előtt:
HasznalhatoMondatok.setMondatok(Mondatok);
Tehát beraktuk a mondatokat a HasznalhatoMondatok osztályba, átlépünk a 2. részre. A MasodikResz.cs-ben ez történik:
partial class MasodikResz : PhoneApplicationPage
{
private List<Mondat> mondatok = new List<Mondat>();
private int szavakSzama = 12;
//constructor
public MasodikResz()
{
mondatok = HasznalhatoMondatok.getMondatok();
foreach(var item in mondatok)
{
string[] mondatSzavai = item.angol.Split(' ');
}
InitializeComponent();
}
}Tehát letároljuk egy osztályon belüli listában a felhasznált mondatokat, majd utána .Split-eljük a mondatot, így szavak lesznek belőlük, amit majd a Mondat osztály angolSzavak mezőjébe rakunk majd be.
Ezeken kívül van még a Szo osztály, ami működésileg hasonló a Mondat osztályhoz:
class Szo
{
public string szo;
public bool isInMondat;
public Szo(string szo, bool isInMondat)
{
this.szo = szo;
this.isInMondat = isInMondat;
}
}És van még az ExtraSzavak osztály, ami szintén adatbázisból fog majd jönni, de most még explicit van feltöltve, de az is nagyon hasonló lesz a HasznalhatoMondatok osztályhoz, tehát statikus:
public static class ExtraSzavak
{
public static List<Szo> Szavak = new List<Szo>();
public ExtraSzavak()
{
szavakFeltoltese();
}
private void szavakFeltoltese()
{
Szo szo = new Szo("Banana", false);
Szavak.Add(szo);
szo = new Szo("House", false);
Szavak.Add(szo);
szo = new Szo("Dog", false);
Szavak.Add(szo);
szo = new Szo("Cat", false);
Szavak.Add(szo);
szo = new Szo("Apple", false);
Szavak.Add(szo);
szo = new Szo("Orange", false);
Szavak.Add(szo);
szo = new Szo("Pear", false);
Szavak.Add(szo);
szo = new Szo("Grape", false);
Szavak.Add(szo);
szo = new Szo("Boat", false);
Szavak.Add(szo);
szo = new Szo("Car", false);
Szavak.Add(szo);
}
public static void setSzavak(List<Szo> _Szavak)
{
// TODO: Complete member initialization
Szavak = _Szavak;
}
public static List<Szo> getSzavak()
{
return Szavak;
}(ez még nem komplett, vágom, hogy miket nem lehet statikus osztályba rakni, most fogom átírni)
Tehát az lenne a kérdésem, hogy nem bonyolítom-e túl, esetleg nem vétek-e egy hihetetlenül triviális hibát? A gondolatmenete jó a felépítésnek? Ti mit csinálnátok másképpen?
Előre is köszönök szépen minden segítséget és bocsánat a hosszúra sikeredett hsz.-ért
-
trisztan94
őstag
válasz
Peter Kiss #5047 üzenetére
Na jó, ezt most fejezzük be, mert kezd a tokom tele lenni veled.
-
trisztan94
őstag
válasz
kalorobi #5041 üzenetére
Na mar miért venne az ember könyvet 2.500-ért egy 6 evvel ezelőtti C# verzióhoz, amikor akar olcsóbban is megkapod e-book formában, sot, van egy teljes C# könyv teljesen ingyen, jogtisztan az interweben?
Es ez miért nem off? Pontosan melyik része illik a topik témájához?
-
trisztan94
őstag
válasz
Peter Kiss #5038 üzenetére
Pont ez az, egy "neves" számítástechnikai suliba jártam, a térség legjobbja.
-
trisztan94
őstag
válasz
Peter Kiss #5033 üzenetére
Középiskolában egyest kaptam az ilyen megoldásokra, mert csak azt lehetett használni amit órán tanítottak (meg struktogramot kellett rajzolni, mert az nyelvfuggetlen), ezért is írtam neki le a dupla ciklusos módszert, amivel a beadandóját kell csinálni.
-
trisztan94
őstag
válasz
metrion #5029 üzenetére
Könyörgöm, pár hsz.-el korábban magyaráztam el a kétdimenziós tömbök lényeget és be is linkeltem egy könyvet amiben utánajárhatsz a dolgoknak..
Meg ne várd mar el, hogy az idehányt kódrészleteket megcsináljuk. Normális kérdés jó lenne.. Pontosan mi a probléma, mit nem tudsz? Az, hogy nem működik, segítsetek nem a legjobb fajta kérdés, ezt te is bevallhatod..
-
trisztan94
őstag
válasz
metrion #5024 üzenetére
Na most vagy én vagyok nagyon fáradt, vagy te.
if (max > t[x, y])
{
max = t[x, y];
}Ez szavakkal leírva a következő:
HA max változó értéke NAGYOBB, mint az aktuálisan vizsgált tömbelem értéke
AKKOR
max értéke legyen az aktuálisan vizsgált tömbelem értékeTehát így sosem a legnagyobb lesz benne.
if (max < t[x, y])
{
max = t[x, y];
}Így ez lesz leírva:
HA max változó értéke KISEBB, mint az aktuálisan vizsgált tömbelem értéke
AKKOR
max értéke legyen az aktuálisan vizsgált tömbelem értékeMivel ha max kisebb, mint a vizsgált elem, így a nagyobb érték lesz a max értéke. Érted?
Ha így sem jó, akkor szvsz a program azon részével lesz gond, ahol feltöltöd a tömböt elemekkel.
-
trisztan94
őstag
válasz
metrion #5021 üzenetére
A max nevű változó nem létezik az aktuális kontextusban, ergó nincs definiálva.
static void Main(string[] args)
{
int[,] t = new int[5, 5];
int max = 0;
Random r = new Random();
Felt(t, r);
Kiir(t);
Console.WriteLine();
Console.WriteLine("A max: {0}", Max(ref max));
Kiir(t);
Console.ReadKey();
} -
trisztan94
őstag
válasz
metrion #5019 üzenetére
Első ránézésre: a ciklusokon kívülre rakd a return max-ot:
static int Max(int[,] t, ref int max)
{
for (int x = 0; x < 5; x++)
{
for (int y = 0; y < 5; y++)
{
if (max > t[x, y])
{
max = t[x, y];
}
}
}
return max;
}ha így sem jó, pakold fel a progit ide.
Ja és
if (max > t[x, y])
{
max = t[x, y];
}nem jó, helyette:
if (max < t[x, y])
{
max = t[x, y];
}Ugye ha nagyobb az elem, mint a max, akkor adjuk a max értékéül.
-
trisztan94
őstag
válasz
trisztan94 #5015 üzenetére
igen, elírtam a végén az if()-et.
Ha max KISEBB, mint TOMB[i,j], akkor adjuk a max értékének a tömb i.,j. elemét
-
trisztan94
őstag
válasz
metrion #5012 üzenetére
Ajánlom figyelmedbe Reiter István C# jegyzetét, abban benne vannak ezek elég érthető módon.
Azért leírom a maximum kiválasztás és kétdimenziós tömbök lényegét, elméleti alapon:
Van egy tömböd, legyen most kétdimenziós. Annak van x és y értéke. Az x a sorokat, az y az oszlopokat jelöli. A legcélszerűbb úgy haladni, hogy végigmész egy sor összes oszlopán, majd mész a következő sorra.
Tehát pl, ha a tömböd [5,5] nagyságú, akkor az azt jelenti, hogy 5 sor és 5 oszlop van benne. Kicsit olyasmi, mint az aknakereső felépítése, ott is sorokra és oszlopokra van felosztva a játéktér.
Na most azért kell neked 2 for ciklus, mert az egyikkel a sorokat, a másikkal pedig az oszlopokat lépteted. A külső ciklus a sorokat, a belső az oszlopokat.
for (int i = 0; i< 5; i++)
{
//ez a külső ciklusod.
for (int j = 0; j < 5; j++)
{
//ez a belső ciklusod
}
}Elkezdi a for ciklust, beállítja a sorszámot nullára, majd belép az első oszlopba a belső ciklussal, ott végrehajt egy műveletet, majd növeli a sorszámot egyel.
Na, így durván ennyi a kétdimenziós tömb lényege. Most vegyük át a maximum kiválasztást, ami baromi egyszerű. Az a lényeg, hogy megnézzük, hogy az oszlop értéke amiben vagyunk nagyobb-e a mi változónknál.
pl.
változónk értéke 100
itt a tömb, ahol tömb = [2,5], tehát 2 sor és 2 oszlop
1.sor
1. oszlop érték = 95. kisebb, mint 100, átugorjuk
2. oszlop érték 150. Nagyobb, mint 100, beálltjuk a változónk értékét erre az értékre (tehát változó = tömb[i,j])
3. oszlop érték 70. Nem nagyobb, átugorjuk
4. oszlop 1000. Nagyobb, berakjuk a változó értékének
5. oszlop 80 és ez így folytatódik tovább
2. sor
1. oszlop 50
2. oszlop 12
3. oszlop 06
4. oszlop 343
5. oszlop 34Tényleges kódban:
int tomb[,] = new int[2,5];
int max = 0;
for(int i = 0; i < 2; i++)
{
for (int j = 0; j < 5; j++)
{
if(max > tomb[i,j])
{
max = tomb[i,j];
}
}
}lehetnek benne elírások, de valahogy így néz ki.
Remélem mostmár világosabb
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- HP Elitebook 840 G6, 14" FULL HD IPS, I7-8665U CPU, 16GB DDR4, 256GB NVMe SSD, WIN 11, 1 év garancia
- HP Elitebook 840 G6, 14" FULL HD IPS, I7-8665U CPU, 16GB DDR4, 256GB NVMe SSD, WIN 11, 1 év garancia
- MacSzerez.com - iPhone 13 Mini / 128GB / Kék / Új gyári Apple akkumulátor! / Garancia!
- MSI GP66 Leopard 10UE 15.6" FHD IPS i7-10870H RTX 3060 16GB 512GB NVMe magyar vbill gar
- MacSzerez.com - iPhone XR / Asztro / Kártyafüggetlen / 64GB / Garancia!
- HP Rack szerverek és tartozékok egyben vagy külön-külön
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5800X 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Bomba ár! Lenovo ThinkPad E550 - i5-5GEN I 8GB I 256SSD I DVDRW I 15,6" HD I CAM I W10 I Garancia
- Telefon felvásárlás!! Honor 400 Lite, Honor 400, Honor 400 Pro
- PlayStation Plus Premium 24 hónapos előfizetés , egyenesen a Sony-tól!
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest